编辑
2024-12-17
工作知识
0

USB设备重置

C
reset_usb_bus() { for i in `find  /sys/bus/usb/devices/usb*`  do    hubport="${i: -1}-1"    if [ -d ${i}/${hubport} ]    then      # 重置root hub下的端口      echo 0 > ${i}/${hubport}/authorized      echo 1 > ${i}/${hubport}/authorized      # 强制设置power从auto到on      echo on > ${i}/${hubport}/power/control    fi  done }

设置多个声卡同时播放

pacmd load-module module-combine-sink sink_name=multi_sound_card # 加载 combine 模块` pacmd set-default-sink alsa_output.platform-rt5651-sound.stereo-fallback # 设置默认声卡到rt5651上 pacmd set-default-sink multi_sound_card # 设置声卡为同时输出 pacmd set-default-sink alsa_output.platform-hdmi-sound.stereo-fallback #设置默认声卡到HDMI上

更新网络时间

ntpdate -u time.nist.gov ntpdate -u ntp.api.bz hwclock -w 

user 不在 sudoers 文件中。此事将被报告

chmod +w /etc/sudoers vim /etc/sudoers 增加 user root    ALL=(ALL)       ALL user    ALL=(ALL)       ALL chmod -w /etc/sudoers

修改时区到上海

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

系统合盖不休眠

/etc/systemd/logind.conf HandleLidSwitch=ignore HandleLidSwitchDocked=ignore

自动登录

lightdm配置文件 [SeatDefaults] autologin-user=user

Qt的对动态库的调试debug

export QT_DEBUG_PLUGINS=1

获取页大小

getconf PAGE_SIZE

修改eth网卡名字

/etc/udev/rules.d SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{ifindex}=="2", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" udevadm  info  --query=path  --path=/sys/class/net/eth0  --attribute

设置QT版本

qtchooser -install qt5.12.2 /usr/local/Qt-5.12.2/bin/qmake export QT_SELECT=qt5.12.2

linux终端乱码

export LANG=zh_CN.UTF-8  export LANGUAGE=zh_CN.zh

Windows下命令行关闭进程

taskkill /pid WIN_PID -f

VMware 14.x 启动虚拟机系统黑屏

经总结主要原因是14版本之后注册了两个LSP协议(vSockets DGRAM、vSockets STREAM)导致异常!
解决方法:使用LSP修复工具(例如:360安全卫士/金山毒霸里的LSP工具)修复LSP网络协议,或者重置下网络链接

smb在win中配置

1.在《启动和关闭windows功能》中 启用smb/cifs功能
2.在本地安全策略中设置《LAN管理器身份验证级别》设置为,发送LM和NTLM-如果已协商。则使用NTLM v2 会话安全
3.在《网络和共享中心》设置高级共享设置为 启动文件共享,关闭密码保护的共享
4.在smb.conf 中,设置 security=share

关闭x层鼠标显示

cd /etc/lightdm/lightdm.conf xserver-command=X -background none -nocursor   增加-nocursor

gogs报git错误fatal: Out of memory, malloc failed (tried to allocate 317810689 bytes)

[pack]    packsizelimit = 2g    window = 0

linux下创建用户时出现 Creating mailbox file: 文件已存在

linux下添加用户后,会在系统里自动加一个邮箱(系统邮箱),路径是:/var/spool/mail/用户名.

rm -rf /var/spool/mail/用户名

win10计算md5值

Get-FileHash -Algorithm MD5 *.tar.gz

dd查看进度条

dd if=/dev/zero of=test.img status=progress

gpg 随机数不够

rngd -r /dev/urandom

Linux清除缓存

To free pagecache: echo 1 > /proc/sys/vm/drop_cachesTo free dentries and inodes: echo 2 > /proc/sys/vm/drop_cachesTo free pagecache, dentries and inodes: echo 3 > /proc/sys/vm/drop_caches

设置Linux密码限制

/etc/security/pwquality.conf minlen = 6  minclass = 2 usercheck = 0

边录边播

arecord -Dhw:0,0 -r48000 -f S16_LE -c 2 | aplay -Dhw:0,0 -r48000
编辑
2024-03-14
工作知识
0

PCIE电源管理

编辑
2024-03-12
工作知识
0

PCIE物理层-链路初始化与训练

link trainning 通过LTSSM(Link Training and Status State Machine)完成。在这个过程中,可以发现并确定如下:

  • 链路带宽
  • 链路速率
  • 链路反相
  • 链路极性

Training Sequences

训练时序由位对齐,符号对齐和交换物理层参数三个部分组成,

TS1和TS2用来传输PCIE链路的配置信息

TS1 Ordered Set的具体符号描述如下

image.png image.png image.png

TS2 Ordered Set的具体符号描述如下

image.png image.png

EIOS

在发送器进入电气空闲状态时,必须发送EIOS Ordered Set

  • 在使用8/10b的时候,EIOS是K28.5(COM)+ 3个K28.3(IDL)符号组成
  • 在使用128/130b的时候,EIOS是16个符号的数据,接收器再接收第4个符号的时候,就已经代表接收到了一个EIOS。

image.png

EIEOS

EIEOS用作确保能够检测到电气空闲退出状态,当使用128/130b时,还用于块对齐

EIEOS在5.0GT/s的符号格式(8/10b)和8.0GT/s的符号格式(128/130b)如下 image.png

gen3的EIEOS数据块格式如下

image.png

链路极性

在training的过程中,TS1和TS2的符号6-15作为链路极性标志,如果极性反转,则

  • TS1的6-15符号是D21.5而不是D10.2
  • TS2的6-15符号是D26.5而不是D5.2

FTS(Fast Training Sequence)

在L0s到L0过渡时用于位锁定和符号锁定,FTS的符号信息如下

image.png

SDS

作为数据块的开始符号,在 Configuration.Idle, Recovery.Idle, 和 Tx_L0s状态下传输,SDS的符号信息如下

image.png

链接错误恢复

链路错误主要发生在解码错误,帧错误,符号丢失,缓冲区溢出或丢失,块对齐,错误通常发生在L0状态,也会在L0到Recovery上发生。如不在L0状态上发生的链接错误,LTSSM状态机不会转换到Recovery上。

链路速率协商

协商的行为主要是先从2.5GT/s上启动Link Training,然后在Training Sequence(TS1/TS2)中可以获取支持的速率大小,然后以2.5GT/s的速率走到L0状态,然后从L0走到Recovery状态,重新开始以新的速率Link Training。

链路Width和Lane顺序协商

对于pcie的带宽根据pcie的协议版本来决定,同样的pcie的总体带宽根据lane的数量来决定。

对于pcie来说,gen3可以兼容gen1,对于lane来说,可以将x8拆分成x4+x4。

对于pcie的lane顺序来说,lane可以交织,也就是lane0可以接lane3,lane1接lane2,lane2接lane1,lane3接lane0

也就是说,对于pcie3.0 x16来说。可以作为单纯的x16的gen3连接,也可以作为2个x8.或4个x4,或16个x1,同时对于每个lane,都可以是gen3(8GT)或gen2(5GT)或gen1(2.5GT)

LTSSM状态机

LTSSM状态机如下所示

image.png

每个阶段的解释如下

  • Detect: 检测pcie是否存在,存在则进入此状态
  • Polling: 端口已经发送Training Ordered Sets并接收到Training Ordered Sets,此时已经位锁定和符号锁定,lane极性也确定好了
  • Configuration:在基于确定的速率上发送和接收数据, lane的width和lane顺序也确定好了
  • Recovery: 恢复阶段开始配置新的速率,然后重新位锁定,符号锁定和块对齐,以及通道去偏移
  • L0:正常运行状态,数据和控制包正常发送和接收
  • L0s:L0的低功耗状态,在接收到EIOS后进入L0s状态,但是L0s恢复到L0时需要重新位锁定,符号锁定和块对齐,以及通道去偏移
  • L1:节能状态,但是L1的resume将比L0s时间更长,通过数据链路层的指令并接收到EIOS之后来进入L1状态
  • L2:更节能的状态,此时接收器和发送器已经关闭,主电源和时钟信号都可能停止,但是辅助电源还是可用,也是通过数据链路层的指令并接收到EIOS之后来进入L2状态
  • Disabled:通过配置链路的方式禁用电气空闲退出状态,Disabled使用 1位(Disable link 位)来发送(在TS1/TS2中),禁用通过更高的协议层设置进入禁用状态,也可以发送连续两个带禁用bit的TS1 Oedered Set来禁用
  • Loopback: 用于测试和故障隔离,回环标志在TS1/TS2的bit 2,连续两个设置回环的TS1可以进入回环。
  • Hot Reset:热重置在TS1/TS2的Training Control域,连续两个设置热重置的TS1可以进入热重置

对于LTSSM状态机的状态情况下的Link Status如下图

image.png

从上图可以知道,例如LinkUp状态,在Configuration时可能是1可能是0,这是指的如果是从detect--->polling--->configuration,则此时是0,到recivery才是1.但是如果是从recovery或其他状态进入configuration,则此时的link up是1

Detect子状态机

Detect的默认状态从Quiet开始,然后默认以2.5GT/s进行均衡,均衡完成之后,等待12ms超时或电气空闲状态Broken后,进入Active,在进入active后的再一个12ms内检测接收器,如果在lane上接收到Detection Sequence,则进入Polling,否则进入quiet。 image.png

Polling子状态机

发送器先进入Active状态

  • 如果从Link Control 2寄存器的bit4获取值为1,则进入Compliance状态
  • 如果已连续发送1024个TS1,这个TS1的通道和链路编号设置为PAD后进入Configuration
  • 否则在24ms超时后判断,Compliance标志如果清空,则进入Configuration,如果是1,则进入Compliance,如果都没有设置,则退出到Detect阶段

如果在Configuration状态

  • 如果接收到发送的8个TS2并且设置了PAD,并且在接收到1个TS2时发送16个TS2,则进入Configuration
  • 否则在48ms超时后退回到Detect

image.png

Configuration子状态机

  • 对于configuration状态机,最开始进入start
  • 如果检测到TS1/TS2的禁用标志,则进入Disabled
  • 如果收到两个连续的TS1,其链路号与PAD不同且通道号设置为PAD,则进入Accept
  • 24ms超时后进入Detect

其他细节不详述,(见4.2.6.3)如下图所示

image.png

Recovery子状态机

Recovery的子状态机如下所示,不详述 image.png

L0

L0没有子状态机,如果处于L0,在改变Link Width时进入Recovery,也可以进入L0s,或L1或L2状态。

L0s子状态机

通过FTS可以进入L0状态 image.png

L1子状态机

当长时间没有TLP和DLLP时,发送端通知接收端进入L1状态,如果接收端不同意则进入L0s状态,如果同意则进入L1状态

image.png

L2子状态机

L2状态属于更节能的状态,所以都会重新Detect,与L0,L0s,L1不同的是,它们都是通过Recovery image.png

Disabled

Disabled没有子状态机,当禁用标志位起来时就是Disabled状态机,如果标志清空,则重新进入Detect

Loopback子状态机

回环通过配置进入,如果退出回环则重新detect,状态机如下

image.png

Hot Reset

Hot Reset没有子状态机,默认通过控制进入Hot Reset,或者接收两个连续的TS1,并带有Hot Reset标志作为进入Hot Reset

编辑
2024-03-12
工作知识
0

PCIE物理层-链路均衡

PCIE3.0默认速度在8.0GT/s,为了提高信号的质量,从3.0开始提供了链路均衡。后面每个版本都额外均衡一次。对于PCIE3.0,Tx端发送Rx EQ的均衡设置,Rx做出响应,最终获得一个最优的均衡组合 和眼图(信号质量)

上电过程

对于pcie而言,先基于2.5GT/s进行传输,然后由一方发送更改速度请求,从而另一方发送均衡请求,进入Recovery状态,进行均衡,最后确定PCIE的速度。其均衡的步骤总共有四步,对于Downstream Port来说有1-3阶段,对于Upstream Port来说有0-3阶段。因为第一个阶段是从DSP发送TS2 Ordered Set给USP做均衡。

均衡步骤

  • Phase 0:DSP给USP发送TS2(Training Sequenec 2)训练序列集,USP接收到之后,将USP速度主动提升到8GT/s,并发送TS1i(Training Sequenec 1)训练序列集给DSP,如果Gen3连接成功,则进入阶段1
  • Phase 1:两边都发送TS1序列集来建立连接,每32个TS1序列集发送一次EIEOS,当信号质量足够强时,链路进入阶段2i
  • Phase 2:USP请求DSP发送presets值,直到满足更高的信号质量要求,DSP最多会根据USP的请求发送65536个TS1的EIEOS的有序集。USP仍是每32个TS1序列集发送一次EIEOS,当信号质量满足更高要求时,则进入阶段3
  • Phase 3:与阶段2相反,DSP请求USP发送presets值,直到满足更高的信号质量要求,USP最多会根据DSP的请求发送65536个TS1的EIEOS的有序集,DSP仍是每32个TS1序列集发送一次EIEOS,当信号质量满足更高时,则均衡完成

当均衡完成,信号从LTSSM状态机的Recovery.RcvrLock,Recovery.RcvrCfg,Recovery.Idel转向L0状态,如下图

image.png

整个均衡的过程如下图

image.png

对于均衡过程中发送的Presets的格式如下

image.png

LTSSM状态机

均衡也是属于LTSSM状态机的开始或组成部分(基于Recovery),对于上电过程,默认先以2.5GT/b的速率从Detect--->Polling--->Configuration--->L0--->Recovery,最后进入Recovery。然后再通过动态链路均衡(上文)来发起调速请求。如下是LTSSM状态机

image.png

编辑
2024-03-05
工作知识
0

PCIE物理层-encoder

PCIE的物理层框图如下

image.png

对于PCIE的传输编码,如果在pcie1.0和pcie2.0,则使用8/10b的编码,如果是pcie3.0及以上,则使用128/130b传输编码

对于pcie3.0,默认是8GT/s,如果传输编码大于等于8GT/s,则默认使用128/130b编码,如果pcie3.0在L0状态,则默认是2.5GT/s传输,则此时使用8/10b编码。

8/10b编码

8/10b编码的作用是为了维持DC平衡,也就是电信号的0和1均匀分布(避免出现5个连续的1或0),8/10b的编码模型只在低于8GT/s下使用,故有必要介绍一下。8/10b的意义在于将8bit的信息按照3bit+5bit分割,填充成4bit+6bit作为10b使用。填充图解如下

image.png

这里填充还分为rd+和rd-模式。RD(running disparity),+/-是1的个数减去0的个数.默认选择rd-

其逻辑为,先默认按照rd-编码,如果是完美平衡码,则不变,如果不是,则转换极性作为rd+编码。 例如:D.x.3(011),其对应的4B码字有两种:1100和0011,此时RD为负,则取1100作为其对应的4B码字作为输出,发现是完美编码

再例如D.x.4(100),其对应的4B码字有两种:1101和0010,若此时RD为负,则取1101作为其对应的4B码字作为输出,但不是完美编码,1101的1的个数大于0的个数,则转换成相反极性,故转换极性为rd+,则默认编码为0010

如下图

image.png

对于特殊的符号编码,如下可知

image.png

上述举例

  • STP:在开始TLP包前,使用K27.7的符号作为STP符号
  • SDP:在开始DLLP包前,使用K28.2的符号作为SDP符号

具体图解如下:

对于TLP,包组成如下,这里物理层会在DLLP的TLP包上追加前缀符号STP和后缀符号END

image.png

对于DLLP,包组成如下,这里物理层会在DLLP的包上追加前缀符号SDP和后缀符号END

image.png

多lane数据的8/10b编码

如果是x1,则物理层按照上述编码即可,如下图

image.png

如果是x2,则数据是均匀分布,以TLP包为例,STP在lane0的开头,END在lane1的结束,如图

image.png

如果是x4,则如图

image.png

数据加扰

在8/10b的编码下,数据发送是先加扰在编码,数据接收是先解码在解扰。加扰解扰是通过LSFR(Linear Feedback Shift Registers)

LSFR计算方式不想明白,这里不介绍了。

128/130b编码

128/130b编码是在8GT/s速度以上,也就是pcie最后速度协商在pcie gen3以上启用。

128/130b的编码是在原128b上添加2b的头,H0和H1,类型如下:

  • 10b :代表是一个数据块
  • 01b :代表是一个Ordered Set块(有序设置块)

与8/10b不一样的是,在多lane的情况下,128/130b会在每个lane上传输H0/H1头,对于每个数据内容,按照小端方式存放

如下是1lane的传输方式

image.png

如下是4lane的传输方式

image.png

Ordered Set Blocks

在link training的阶段,可以通过特殊的有序集来判断块对齐,这个特殊的有序集就是电气空闲退出有序集(EIEOS),下面是通过EIEOS来判断对齐状态的逻辑

  • 未对齐阶段: 接收器在电气空闲后进入未对齐状态,例如刚进入128/130b编码或者退出低功耗状态,如果等待到下一个EIEOS,则进入对齐阶段
  • 对齐阶段: 接收器接收EIEOS和SDS(Start of Data Stream)有序集时进入对齐阶段,如果接收到SDS有序集,接收器进入锁定阶段,如果接收到00b或11b的header,则返回未对齐阶段
  • 锁定阶段: 这个阶段下,数据块将在SDS Ordered Set后正常发送。

Data Block

数据块由Framing Tokens 和 TLPS 和DLLPS组成,它以SDS Ordered Set开始,以SKP Ordered Set结束。

对于Framing Tokens主要有如下几类

image.png

  • IDL:没有TLPs和DLLPs或其他Framing Tokens传输时,传输此
  • SDP:开始DLLP包的Tokens,后面跟随DLLP包
  • STP:开始传输TLP包的Tokens,后面跟随12bit的TLP序列号,在后面是TLP包
  • EDB:End错误,用于确认之前的TLP包被取消
  • EDS:数据流结束,表示数据流结束,下一个块将是Ordered Set Block

上述几类令牌的具体格式如下所示

image.png

所以对于TLP和DLLP的整体包格式图如下

image.png

如上图,TLP包含STP+TLP Prefix(如有)+TLP Header+TLP Payload+TLP 摘要(如有)+LCRC。 如果一个TLP有3DW的Header,1DW的payload,不包括TLP摘要,则整体TLP的length的长度为6=1(Tokens)+0(TLP Prefix)+3(TLP Header)+1(Payload)+0(TLP digest)+1(LCRC)

对于DLLP则简单了,就是在DLLP上加上SDP的Token,即SDP+DLLP+CRC

对于x8的lane的pcie接口,总包数据传输如下所示

image.png

从上面可以知道,对每个lane,H0/H1都是存在的,而Tokens+TLP+DLLP则是均匀遍布在每个lane上。具体为:STP+TLP Header+TLP Payload+LCRC+SDP+DLLP+CRC+IDL+STP....

对于取消TLP是整包示例如下

image.png

这里值得注意的是,EDB的Tokens是作为TLP的扩展,它不计算在TLP的lenth字段中,所以TLP包在传输的过程中,会直接带一个EDB作为TLP的取消。

之前提到了SKP作为整个数据库的结束,故如下图展示带SKP Tokens的整包示例

image.png

可以看到,在EBS之后,新的包是10+SKP+SKP_END+LSFR。故SKP Ordered Set作为整个数据块的结束

数据加扰

通过LSFR加扰,在128b/130b下,前两位H0/H1不会被加扰,EIEOS Ordered Set,SDS,SKP, EIOS不会加扰,LSFR会在EIEOS发送后加扰(有效数据加扰),在EIEOS接收后解扰(接收器解扰数据)。