CAN FD总线

1、CAN FD是什么

CAN FD,全称为CAN with Flexible Data rate。继承了CAN的主要特性,弥补了CAN的数据长度和带宽的限制。可简单认为CAN FD就是CAN的升级版。

传统的CAN总线缺点:

  1. CAN 总线最高速率为 1Mbit/s,实际使用中通常只有是 500k,随着功能的逐渐增多,各 ECU 之间的信息交互也越多,导致总线负载持续增加;
  2. CAN 报文中只有约 40~50%的带宽用于实际数据传输;
  3. 最大总线速度受到响应机制的限制,例如 CAN 控制器中的 ACK生成延迟;收发器传播延迟;导线延迟等。

CAN FD的特点:

  1. 传输速率是可变的。从控制场中的BRS位到ACK场之前(含CRC分界符)为可变速率,最高速率可达到8Mbps。其他部分与CAN相同,在无填充情况下,传输效率最大为89.5%。
  2. 数据长度不同。CAN FD支持的最大数据长度为64byte。这里的DLC有个特殊的约定,当DLC小于或等于8的时候,DLC和数据长度一致当DLC大于8的时候,DLC=9——12字节,DLC=10——16字节,DLC=11——20字节,DLC=12——24字节,DLC=13——32字节,DLC=14——48字节,DLC=15——64字节。如果数据长度为10字节,那就要选择最近10字节并且大于它的DLC=9,并且在最后填充2个字节凑够12字节。
  3. 帧格式不同。CanFD新增了FDF、BRS、ESI位。

2、CAN FD帧结构

CAN FD数据帧结构与CAN一样,一共有:帧起始SOF,仲裁段,控制段,数据段,CRC段,ACK段,帧结束,共7个部分。

2.1.1 帧起始

CAN FD与CAN使用相同的SOF标志位来标志报文的起始。帧起始由1个显性位构成,标志着报文的开始,并在总线上起着同步的作用。

2.1.2 仲裁段

与传统CAN相比,CAN FD取消了远程帧,用RRS位替换了RTR位,为常显性。IDE位仍为标准帧和扩展帧标志位,若标准帧与扩展帧具有相同的前 11 位 ID,那么标准帧将会由于 IDE 位为 0,优先获得总线。

RTR(Remote Transmission Request Bit):远程发送请求位,RTR位在数据帧里必须是显性,而在远程帧里为隐性。
RRS(Remote Request Substitution):远程请求替换位,即传统CAN中的RTR位,CAN FD中为常显性。

2.1.3 控制段

控制段中CANFD与CAN有着相同的IDE,res,DLC位。同时增加了三个控制bit位,FDF、BRS、ESI。

FDF(Flexible Data Rate Format):原CAN数据帧中的保留位r。FDF常为隐性,表示CAN FD 报文。

BRS(Bit Rate Switch):位速率转换开关,当BRS为显性位时数据段的位速率与仲裁段的位速率一致,当BRS为隐性位时数据段的位速率高于仲裁段的位速率。

ESI(Error State Indicator):错误状态指示,主动错误时发送显性位,被动错误时发送隐性位。

DLC同样是4bit表示数据段的长度,对应的关系如下:

2.1.4 数据段

CAN FD不仅能支持传统的0-8字节报文,同时最大还能支持12, 16, 20, 24, 32, 48, 64字节。变速度变的就是这一段。

2.1.5 CRC段

为了避免位填充对CRC的影响,CAN FD在CRC场中增加了stuff count记录填充位的个数对应8的模,并用格雷码表示,还增加了奇偶校验位。FSB(fixed stuff-bit)固定为前一位的补码。

Stuff Count由以下两个元素组成:

格雷码计算:CRC区域之前的填充位数除以8,得到的余数(Stuff bit count modulo 8)进行格雷码计算得到的值(Bit0-2)
奇偶校验(parity):通过格雷码计算后的值的奇偶校验(偶校验)

CAN FD对CRC算法进行了改进,CRC对填充位也加入了计算。在校验和部分为避免有连续位超过6个,就确定在第一位以及以后每4位添加一个填充位加以分割,这个填充位的值是上一位的反码,作为格式检查,如果填充位不是上一位的反码,就作出错处理。

CAN的CRC的位数是15位,而在CAN FD中,CRC场扩展到了21位,如下:

当传输数据为0~8字节或更少时:CRC 15位
当传输数据为9~16字节或更少时:CRC 17位
当传输数据超过17~64个字节时:CRC 21位

2.1.6 ACK段

与CAN相比,在CAN FD中最多可接受2个位时间有效的ACK,允许1个额外的位时间来补偿收发器相移和传播延迟)

由从高速的数据场到慢速的仲裁场时,时钟切换会引起收发器相移和总线传播延迟。为了补偿其相移和延迟,相比传统的CAN,在CAN FD中多加了这额外的1位时间。
在ACK之后,发送ACK界定符。这是一个表示ACK结束的分隔符,为是1位隐性位。

2.1.7 帧结束

与CAN一样,CAN FD的帧结尾也为连续7位的隐性位。

3、工具配置

在canoe里面只需要将Hardware里的can setup改成CAN FD,仲裁段还是500K,数据段改成对应的波特率,譬如2000K(2M)就行。

解析CANFD最好用arxml,用DBC解析的话可能会有长度问题。

### 部署 Stable Diffusion 的准备工作 为了成功部署 Stable Diffusion,在本地环境中需完成几个关键准备事项。确保安装了 Python 和 Git 工具,因为这些对于获取源码和管理依赖项至关重要。 #### 安装必要的软件包和支持库 建议创建一个新的虚拟环境来隔离项目的依赖关系。这可以通过 Anaconda 或者 venv 实现: ```bash conda create -n sd python=3.9 conda activate sd ``` 或者使用 `venv`: ```bash python -m venv sd-env source sd-env/bin/activate # Unix or macOS sd-env\Scripts\activate # Windows ``` ### 下载预训练模型 Stable Diffusion 要求有预先训练好的模型权重文件以便能够正常工作。可以从官方资源或者其他可信赖的地方获得这些权重文件[^2]。 ### 获取并配置项目代码 接着要做的就是把最新的 Stable Diffusion WebUI 版本拉取下来。在命令行工具里执行如下指令可以实现这一点;这里假设目标路径为桌面下的特定位置[^3]: ```bash git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git ~/Desktop/stable-diffusion-webui cd ~/Desktop/stable-diffusion-webui ``` ### 设置 GPU 支持 (如果适用) 当打算利用 NVIDIA 显卡加速推理速度时,则需要确认 PyTorch 及 CUDA 是否已经正确设置好。下面这段简单的测试脚本可以帮助验证这一情况[^4]: ```python import torch print(f"Torch version: {torch.__version__}") if torch.cuda.is_available(): print("CUDA is available!") else: print("No CUDA detected.") ``` 一旦上述步骤都顺利完成之后,就可以按照具体文档中的指导进一步操作,比如调整参数、启动服务端口等等。整个过程中遇到任何疑问都可以查阅相关资料或社区支持寻求帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不吃鱼的羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值