610u 发表于 2022-11-18 16:54

基于GD32C10x MCU 控制器局域网络(CAN)

CAN基础介绍
CAN(Controller Area Network)总线是一种可以在四轴飞行器情况下实现微处理器或者设备之间相互通信的总线标准。GD32C10x MCU CAN模块支持协议 2.0A、2.0B、ISO11891-1:2015 和BOSCH CAN-FD 规范。CAN2.0A标识符为11bit,CAN2.0B标识符为29bit,ISO11891-1:2015指的是CAN通信速率为125Kbps~1Mbps的高速通信标准,BOSCH CAN-FD 规范指的是CAN通信速率在1Mkbps以上,且数据数据段的字节数由原来的8byte扩展到64byte。CAN具有很高的可靠性,广泛应用于:汽车电子、工业自动化、船舶、医疗设备、工业设备等方面。本文主要是基于GD32C10x MCU介绍CAN模块的具体应用方法,在CAN协议方面只做简要介绍。

610u 发表于 2022-11-18 16:59

GD32C10x CAN模块主要特性
1、常规帧:通信波特率最大为 1Mbit/s;
2、CAN-FD 帧:通信波特率最大为 6Mbit/s;
3、支持传输延迟补偿;
4、支持时间触发通信;
5、中断使能和清除。
发送功能:
1、3 个发送邮箱;
2、支持发送优先级;
3、支持发送时间戳。
接收功能:
1、2 个深度为 3 的接收 FIFO;
2、具有 28 个标识符过滤器;
3、FIFO 锁定功能。
时间触发通信:
1、在时间触发通信模式下禁用自动重传;
2、16 位定时器;
3、接收时间戳;
4、发送时间戳。

610u 发表于 2022-11-18 17:00

CAN基础应用电路介绍及协议简介
CAN通信是一种异步通信,具有CAN_High和CAN_Low两条信号线,共同构成一组差分信号线,以差分信号的形式进行通信。CAN物理层的形式主要分为闭环总线及开环总线网络两种,一个适合于高速通讯,一个适合于远距离通讯。

610u 发表于 2022-11-18 17:01

闭环总线网络框图如下:
CAN闭环框图

CAN闭环通信网络具有速率高、距离短特点,总线最大长度40m,通信速度最高1Mbps,总线两端各接一个120R的电阻。

610u 发表于 2022-11-18 17:04

开环总线网络框图如下:
CAN开环框图

CAN开环通信网络具有低速、通信距离远特点,通信距离1km,最高通信速率125kbps,两条总线各接2.2KR的电阻。

610u 发表于 2022-11-18 17:05

CAN通信协议数据帧如下:

帧起始:由一个显性电平表示CAN数据帧的开始。仲裁段:表示该帧的ID是标准帧还是扩展帧,标准帧ID为11bit,扩展帧的ID为29bit,RTR 位表示该帧是数据帧还是远程帧,显性电平为数据帧,隐性电平为远程帧。控制段:IDE位显性电平标准帧,隐性电平扩展帧,r0、 r1位发送必须是显性电平,DLC表示发送的字节数,通常为8byte,CAN-FD数据段字节数可扩展到64byte。数据段:发送的数据具体内容。CRC段:计算的内容包括帧起始、仲裁段、控制段和数据段。ACK段:由ACK slot和ACK界定符2位组成,发送单元为2个隐性位,接收单元在接收到正确的数据帧后,会在ACK slot位发送显性位,通知发送方。帧结束:为连续的7个隐性位组成。

610u 发表于 2022-11-18 17:06

CAN标准帧和扩展帧的帧格式如下图:
CAN标准帧和扩展帧

CAN扩展帧中SRR为替代远程请求位。远程帧和数据帧的本质区别是有无数据段。

610u 发表于 2022-11-18 17:07

CAN位时序介绍
CAN协议是采用位同步传输方式,CAN传输位时序图如下所示:

位速率指的是发送单元每秒发送的位数,一个位通常由SS同步段、PTS传播时间段、PBS1相位缓冲段1、PBS2相位缓冲段2四部分组成。SS同步段:总线上多个连接单元的同步,由隐性电平到显性电平或由显性电平到隐性电平。PTS传播时间段:网络上的物理延迟。PBS1、2:同步的信号边沿没有在SS段出现,可在此段进行补偿。SJW再同步补偿宽度:PBS1、PBS2的误差累计补偿。

610u 发表于 2022-11-18 17:08

CAN位时序同步如下图所示:

610u 发表于 2022-11-18 17:09

CAN发送波特率的计算方式如下:

610u 发表于 2022-11-18 17:09

GD32C10x CAN模块应用
GD32C10x CAN模块设计相比于国外厂商大佬NXP、ST简单很多,但是满足一般的CAN应用场景已经足够。据说兆易创新的最新款车规级MCU在2022年中将面世,应用于车规级的MCU,CAN模块的设计肯定少不了,期待GD能带给我们更多惊喜。

610u 发表于 2022-11-18 17:10

CAN模块结构框图如下:

CAN总线控制器有四种通信模式:静默、回环、回环静默、正常通信模式。静默:只从总线接收数据,不发送。回环:发送数据自己接收同时也发送到CAN总线上。回环静默:自发自收,通常用于CAN模块的自测。正常模式:可从CAN总线接收数据,也可向CAN总线发送数据。

610u 发表于 2022-11-18 17:12

CAN数据发送框图如下:

CAN模块总共有3个发送邮箱,TMIx寄存器主要配置数据帧标识符标准格式或者扩展格式、远程帧或者数据帧、发送使能。TMPx寄存器主要配置发送数据长度、标准帧还是FD帧,CAN-FD模式下数据段速率是否转换。TMDATA0、1主要配置发送的字节具体内容。在FD模式下,如果软件想要使用发送邮箱x发送64字节数据,需要通过写TMDATAx寄存器16次将待发送数据写入内部专用SRAM区。发送邮箱有空闲、就绪、挂起、发送四个状态。

610u 发表于 2022-11-18 17:13

发送优先级
当有2个及其以上发送邮箱等待发送时,寄存器CAN_CTL的TFO位的值可以决定发送顺序。当TFO为1,所有等待发送的邮箱按照先来先发送(FIFO)的顺序进行。当TFO为0,具有最小标识符(Identifier)的邮箱最先发送。如果所有的标识符(Identifier)相等,具有最小邮箱编号的邮箱最先发送。

610u 发表于 2022-11-18 17:15

CAN数据接收框图如下:
CAN接收框图

CAN模块总共3个接收邮箱,寄存器配置与发送基本一致。同样在FD模式下,如果软件想要从FIFOx中读64字节数据,需要通过读
CAN_RFIFOMDATA0x寄存器16次将数据全部读出。

610u 发表于 2022-11-18 17:16

接收FIFO状态信息:
接收FIFO状态信息包含在寄存器CAN_RFIFOx中。RFL:FIFO中包含的帧数量。FIFO为空时,RFL为0;FIFO为满时,RFL为3。
RFF:FIFO满状态标志位。这时RFL为3。RFO:FIFO溢出标志位。当FIFO已经包含了3个数据帧时,新的数据帧到来使FIFO发生溢出。
如果CAN_CTL寄存器的RFOD位被置1,新的数据帧将丢弃。如果该位被清0,新的数据帧将覆盖接收FIFO中最后一帧数据。

chenqianqian 发表于 2022-11-19 10:44

这是刷帖嘛?

daichaodai 发表于 2022-11-19 17:45

能不能一次发完,这样发帖真的是刷帖嫌疑。

tpgf 发表于 2022-12-8 11:11

CAN FD的优势
该协议能够支持更高的速率,可以更快的刷写ECU;
在单个数据帧内传送率可达64字节,避免了经常发生的数据分拆传输的状况;
对汽车行业而言,CAN-FD协议显得非常重要,CAN线束和其它物理层面元件可重新再利用;
更高的带宽,在电动车以及今后的动力CAN上应用更有优势
上层应用层架构不需要改变,在原来基础上扩展即可。

wowu 发表于 2022-12-8 11:27

can fd当仲裁场比特率和数据场比特率达到1:8时,数据吞吐量将达到传统CAN的大约六倍
页: [1] 2
查看完整版本: 基于GD32C10x MCU 控制器局域网络(CAN)