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即可把这些参数写入到筛选控制寄存器中,从而使用筛选器

 

posted @ 2023-12-18 16:07  该说不唠  阅读(212)  评论(0)    收藏  举报