CAN总线

2、位时序
位时序分为4个段,分别为SS段、PTS段、PBS1段和PBS2段,单位为1Tq
SS段为同步段,用来判断节点与总线是否同步,主要是看总线上边沿的跳变是否包含在SS段内。
其他三段是用来补偿误差和延时时间的
数据的采样点在PBS1与PBS2之间

3、波特率
规定好1个Tq代表的时间长度和一个数据为有多少个Tq,即可确定波特率
4、同步过程
CAN的数据同步可以分为硬同步和重新同步两种
4.1 硬同步
CAN总线上的通讯节点在不发送数据时会时刻检测总线上的电平变化,当检测到下降沿时,节点会检测下降沿是否在
SS段上,如果不在说明内部时序与总线不同步,节点就会将位时序中的SS段平移到下降沿的位置,来实现同步

4.2 重新同步
硬同步只适用于起始帧的同步,如果数据帧很长,硬同步则无能为力。重新同步:分为两种情况,一种是相位超前,一种是相位滞后。
相位超前时,在PBS1段中增加一定的时间;相位滞后时,就在PBS2中减少一定的时间。


SJW:重新同步补偿宽度,可由CAN控制器来设置。
5、报文种类
数据帧:包含数据段,起始段,仲裁段。控制端,结束段,CRC校验段,应答段
数据帧以一个逻辑0表示开始,以7个逻辑1表示结束
仲裁段:当有两个及以上的报文同时发送时,仲裁段依据线与逻辑进行仲裁,决定谁的优先级更高
仲裁段有标准格式和扩展格式两种,二者的ID信息的数据位数不同,分别为11位和29位

控制段:由r1与r0为保留位,主要时DLC段,代表数据长度,可以表示的长度是0-8。
数据段:由0-8个字节组成,MSB先行
CRC段:包含15位的校验码,如何CAN控制器算出的CRC码与接收到的CRC码不同。节点就会发送错误帧,请求重新发送。最后包含一个CRC界定符
ACK段:ACK槽位和ACK界定符,发送节点发送隐形位,接受节点发送显性位以示应答。
6、CAN控制内核
6.1 主控制寄存器 CAN_MCR
主要负责管理CAN的工作模式
6.2 位时序寄存器CAN_BTR
主要用于配置测试模式、波特率及位内的段参数
位31:SILM静默模式
位30:LBKM回环模式

6.3 CAN 波特率的计算


6.4 发送邮箱
CAN外设的发送邮箱,一共有三个,即可以保存3个待发送的报文。

当我们使用CAN外设发送数据时,把报文的各个段分解,存入到发送邮箱的对应的寄存器中。
标识符寄存器:将其中的发送请求寄存器TXRQ置1,即可把数据发送出去。
STDDID:存储标准标识符或扩展标识符的高位字节(11位)
EXTID:存储扩展标识符的低字节(18位)
6.5 CAN接受FIFO
CAN外设有两个FIFO,每个FIFO有3个邮箱,因此可以接收6个报文。当接收到报文时,报文计数器会自增+1,读取FIFO后,报文计数器
会自减1,我们可以通过状态寄存器来获取报文计数器的值。也可以设置锁定模式,锁定模式下,FIFO溢出时会丢弃新的报文,否则会覆盖原有报文。
与发送邮箱相同,每个FIFO中也包含有标识符寄存器、数据寄存器等。
6.6 验收筛选器
发送节点发送数据时会将报文广播给所有接收器,接收器通过筛选器来判断是否要接收数据。
筛选ID的长度共有两种31位和16位
过滤方法有两种,一种是白名单模式,将可接收报文的ID列出一个表,相同的可以接收。一种是掩码模式,关键词搜索,将接收报文的某几位设置成掩码。
7、结构体
7.1初始化结构体
配置时钟分频、SJW长度、BS1/BS2D长度、CAN的工作模式、自动重传、自动唤醒、时间触发、锁定FIFO、自动离线管理、报文优先级
7.2发送结构体与接收结构体
标准标识符、扩展标识符、数据长度、数据内容、远程帧、扩展标志。接收结构体中还有一个筛选器编号
当发送报文时,先定义一个发送结构体,然后将报文中的内容填入到该结构体中,然后调用发送函数;
接收报文时,先查看FIFO的标志位,看是否有数据,有的话调用接收函数,然后再从接收结构体中提取数据
7.3 筛选器结构体
FxR1高低16位,FxR2高低16位,存储FIFO编号,筛选器编号,筛选器模式(32or16,列表或掩码),激活筛选器

调用库函数CAN_FilterInit即可把这些参数写入到筛选控制寄存器中,从而使用筛选器

浙公网安备 33010602011771号