打印
[应用相关]

STM32H7的CAN FD教程笔记

[复制链接]
楼主: 裤脚口感好
手机看帖
扫描二维码
随时随地手机跟帖
21
裤脚口感好|  楼主 | 2021-8-6 13:06 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
通过这个框图要了解到以下信息:
(1)CANFD1和CANFD2共用一个RAM空间
(2)每个CANFD都有自己的内核
(3)CAN内核实现协议控制和收发移位寄存器
(4)Tx handler控制消息从CAN消息RAM到CAN内核
(5)Rx handler控制CAN内核到CAN消息RAM

使用特权

评论回复
22
裤脚口感好|  楼主 | 2021-8-6 13:06 | 只看该作者
四、RAM管理
必须配置每条消息的字节数,以确定每条消息所需的内存大小。 CAN-FD上有效负载的增加可以更有效的将内存都利用起来,并允许更多消息要存储在分配的存储空间中。

使用特权

评论回复
23
裤脚口感好|  楼主 | 2021-8-6 13:07 | 只看该作者
总的专用RAM大小是2560个32bit数据。

(1)过滤区(11bit过滤和29bit过滤)
(2)接收区(Rx FIFO 0,Rx FIFO 1和Rx Buffer)
(3)发送区(Tx event FIFO,Tx Buffers)
(4)触发空间(Trigger memory)

使用特权

评论回复
24
裤脚口感好|  楼主 | 2021-8-6 13:07 | 只看该作者

使用特权

评论回复
25
裤脚口感好|  楼主 | 2021-8-6 13:08 | 只看该作者
FDCAN外设的所有部分都可以由用户配置。 所有部分的所有元素之和必须不能超过CAN消息RAM的总大小。 该RAM通过以下方式提高了灵活性和性能:从而有可能消除未使用的部分,并为其他部分扩展足够的内存。在CAN消息中以动态且连续的方式分配每个部分(按照上图顺序); 但是为了避免超出RAM的风险并且出于可靠性的原因,没有将特定的开始和结束地址分配给每个部分。

使用特权

评论回复
26
裤脚口感好|  楼主 | 2021-8-6 13:09 | 只看该作者
FDCAN外设可以配置三种传输机制:Tx buffer ,Tx queue 和 Tx FIFO并可以通过Rx buffer 和 Rx FIFO 接收。 它们配置有起始地址偏移量和要存储的存储元素。 起始地址是在配置中预定义的(0到2560),用户必须确保每个内存空间中的元素数量不会导致它们重叠。

使用特权

评论回复
27
裤脚口感好|  楼主 | 2021-8-6 13:09 | 只看该作者
注:消息的接收和发送意味着在RAM级别存储“元素”。 这个“元素”仅包含标识符,DLC,控制位(ESI,XTD,RTR,BRS,FDF),数据字段和特定的发送/接收位字段进行控制。 CAN消息的其余位会自动由硬件处理而不保存在RAM中 。

使用特权

评论回复
28
裤脚口感好|  楼主 | 2021-8-6 13:10 | 只看该作者
用于控制接收的特定位字段是滤波器索引,可接受的不匹配帧和Rx时间戳。用于传输的特定位字段是消息标记(message marker)和event FIFO控制位。无论Tx buffer, Tx FIFO, Tx queue 或 Rx buffer 中的每个元素分配的32bit的数量是多少,要计算保留:
————————————————
(1)标头信息(两个保留的32bit),用于分配标识符,DLC字段,控制位和特定的发送/接收位字段。
(2)数据(足够的32bit数据个数)以包含每个数据字段的字节数。

使用特权

评论回复
29
裤脚口感好|  楼主 | 2021-8-6 13:10 | 只看该作者
下面的公式确定为每个元素分配的32bit的数量:
元素大小(以字为单位)=标头信息(2个字)+数据(数据字段/ 4)

其中数据字段是每条消息的数据字节数

如果数据字段的范围是0到8,则每个元素为数据分配2个字。下表详细介绍了必要的“元素”大小,具体取决于数据字段范围

使用特权

评论回复
30
裤脚口感好|  楼主 | 2021-8-6 13:11 | 只看该作者

使用特权

评论回复
31
裤脚口感好|  楼主 | 2021-8-6 13:12 | 只看该作者
有效使用CAN消息RAM的示例。 这个例子假设配置了FDCAN外设的应用程序:

(1)发送带有专用Tx buffer的32条消息(每个消息在数据字段中包含8个字节)。
(2)具有128个11位过滤器,用于接收消息。
(3)接收64条消息,其中每个消息在专用Rx buffers的数据字段中包含64个字节。
(4)接收64条消息,其中每个消息在Rx FIFO 0的数据字段中包含64个字节。

使用特权

评论回复
32
裤脚口感好|  楼主 | 2021-8-6 13:12 | 只看该作者

使用特权

评论回复
33
裤脚口感好|  楼主 | 2021-8-6 13:13 | 只看该作者
在此示例中,RAM中的分配按以下顺序进行:
(1)在ID-11位部分分配128个字。
(2)保留1152个字用于接收Rx FIFO 0部分中的元素。
(3)保留1152个字,用于接收Rx缓冲区中的元素。
(4)为发送缓冲区中发送的元素保留128个字。

由于采用了动态分配,并且不对未使用的段进行任何分配,因此整个内存大小有效利用了RAM:在此应用程序中分配了所有2560个字。

注意:配置后,分配的地址范围初始化为零

大多数STM32设备支持一个以上的FDCAN外设来满足所有应用程序要求。在这种情况下,重要的是要说RAM是在不同外设之间共享的。 用户可以划分各种外设上的RAM(每个外设的大小通过指示其起始偏移地址来选择)。下图显示了使用多个FDCAN实例的CAN消息RAM的示例。 这该示例假定用户将CAN消息RAM分为两个外设:第一个外设的大小为第二个外设的两倍。

使用特权

评论回复
34
裤脚口感好|  楼主 | 2021-8-6 13:14 | 只看该作者

使用特权

评论回复
35
裤脚口感好|  楼主 | 2021-8-6 13:14 | 只看该作者
五、RAM过滤区
FDCAN外设可以配置两套验收滤波器:一套用于标准标识符,一种是扩展标识符,用于存储或拒绝接收到的消息。128个过滤元素可以配置用来配置128个11bit标准ID和64个过滤元素可以用来配置64个29bit扩展ID。11位过滤器部分的起始地址通过FDCAN_SIDFC寄存器中的FLSSA [13:0]位进行配置,并且通过FDCAN_XIDFC寄存器中的FLESA [13:0]配置29位滤波器部分。下图显示了CAN消息RAM的一部分,其中包含过滤器元件的数量及其开始位置地址。

使用特权

评论回复
36
裤脚口感好|  楼主 | 2021-8-6 13:15 | 只看该作者
可以将这些过滤器分配给Rx FIFO 0/1或专用的Rx buffers。 FDCAN执行接受过滤,它总是从过滤器元素#0开始,然后遍历过滤器列表以找到匹配项元素。验收过滤在第一个匹配元素处停止,而随后的过滤元素不在针对此消息进行了检索。因此,配置过滤器元素的顺序对过滤性能有很重要的影响。用户选择启用或禁用每个过滤器元素,并可以配置每个元素以接受或拒绝过滤。每个过滤器元素可以配置为:

使用特权

评论回复
37
裤脚口感好|  楼主 | 2021-8-6 13:15 | 只看该作者
(1)范围过滤器(Range filter):该过滤器匹配标识符在两个ID定义的范围内的所有消息。
(2)专用ID的过滤器(Filter for dedicated IDs):可以将过滤器配置为匹配一个或两个特定的标识符。
(3)经典位屏蔽过滤器(Classic bit mask filter):通过对接收到的标识符的位进行屏蔽来匹配标识符组。第一个ID配置为消息ID过滤器,第二个ID为过滤器屏蔽。过滤器屏蔽的每个零位屏蔽已配置的ID过滤器的相应位位置。

注:如果所有位均等于1,则仅当接收到的消息ID和消息ID过滤器相同时,才会发生匹配。 如果所有掩码位均等于0,所有消息ID均匹配。

使用特权

评论回复
38
裤脚口感好|  楼主 | 2021-8-6 13:16 | 只看该作者
高优先级消息

当收到高优先级消息时,FDCAN可以通知用户。 此通知可用于监视传入的高优先级消息的状态并启用对这些元素的快速访问。FDCAN在消息过滤器的帮助下检测到高优先级消息。 过滤器元素提供以下内容与高优先级邮件相关的设置:

使用特权

评论回复
39
裤脚口感好|  楼主 | 2021-8-6 13:17 | 只看该作者
(1)设置优先级并在过滤器匹配的情况下存储在FIFO 0/1中:如果此消息过滤器匹配,则FDCAN通知高优先级消息到达的信息,并将元素存储在Rx FIFO 0/1中。

使用特权

评论回复
40
裤脚口感好|  楼主 | 2021-8-6 13:17 | 只看该作者
(2)如果过滤器匹配,则设置优先级:如果此消息过滤器匹配,则FDCAN会通知有关高优先级的信息消息到达,但不存储元素。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则