1. CAN协议
1.1 CAN协议简介
1.2 CAN物理层
遵循ISO11898标准的高速、短距离闭环网络,总线最大长度为40m,通信速度最高为 1Mbps,总线的两端各要求有一个120欧的电阻
是遵循ISO11519-2标准的低速、远距离开环网络,最大传输距离为1km,最高通讯速率为125kbps,两根总线是独立的、不形成闭环,要求每根总线上各串联有一个2.2千欧的电阻
1.3 CAN协议层
⏩ 位时序分解:为了实现位同步,CAN协议把每一个数据位的时序分解成SS段、PTS段、PBS1段、PBS2段,这四段的长度加起来即为一个CAN数据位的长度。分解后最小的时间单位是Tq,一个完整的位由8~25个Tq组成
⏩ 同步过程:波特率只是约定了每个数据位的长度,数据同步还涉及到相位的细节,此时就要用到数据位内的SS、PTS、PBS1及PBS2段了。根据对段的应用方式差异, CAN的数据同步分为硬同步和重新同步。其中硬同步只是当存在帧起始信号时起作用,无法确保后续一连串的位时序都是同步的,而重新同步方式可解决该问题
-- 相位超前:节点从总线的边沿跳变中,检测到它内部的时序比总线的时序相对超前 2Tq,这时控制器在下一个位时序中的 PBS1 段增加 2Tq 的时间长度,使得节点与总线时序重新同步
-- 相位滞后:节点从总线的边沿跳变中,检测到它的时序比总线的时序相对滞后 2Tq,这时控制器在前一个位时序中的 PBS2 段减少 2Tq 的时间长度,获得同步
⏩ 报文种类及结构:对数据、操作命令 (如读/写) 以及同步信号进行打包,打包后的这些内容称为报文。CAN一共规定了5种类型的帧
2. CAN控制器
STM32有两组CAN控制器,其中CAN1是主设备,框图中的存储访问控制器是由CAN1控制的,CAN2无法直接访问存储区域,所以使用CAN2的时候必须使能CAN1外设的时钟。框图中主要包含CAN控制内核、发送邮箱、接收FIFO以及验收筛选器,下面对框图中的各个部分进行介绍
2.1 CAN控制内核
2.2 CAN发送邮箱
当使用CAN外设发送报文时,需要把报文的各个段分解,按位置写入到这些寄存器中,并对标识符寄存器CAN_TIxR中的发送请求寄存器位TMIDxR_TXRQ置1,即可把数据发送出去。其中标识符寄存器CAN_TIxR中的STDID寄存器位比较特别。我们知道CAN的标准标识符的总位数为11位,而扩展标识符的总位数为29位的。当报文使用扩展标识符的时候,标识符寄存器CAN_TIxR中的STDID[10:0]等效于EXTID[18:28]位,它与EXTID[17:0]共同组成完整的29位扩展标识符
⏩ 发送邮箱标识符寄存器CAN_TIxR
⏩ 发送邮箱低字节数据寄存器CAN_TDLxR
⏩ 发送邮箱高字节数据寄存器CAN_TDHxR
2.3 CAN接收FIFO
⏩ 接收FIFO邮箱数据长度和时间戳寄存器CAN_RDTxR
⏩ 接收FIFO邮箱低字节数据寄存器CAN_RDLxR
⏩ 接收FIFO邮箱高字节数据寄存器CAN_RDHxR
2.4 CAN验收筛选器
根据筛选ID长度来分类有有以下两种:
检查 STDID[10:0]、EXTID[17:0]、IDE 和 RTR 位,共 31 位
检查 STDID[10:0]、RTR、IDE 和 EXTID[17:15],共 16 位
根据过滤的方法分为以下两种模式:
标识符列表模式,它把要接收报文的 ID 列成一个表,要求报文 ID 与列表中的某一个标识符完全相同才可以接收,可以理解为白名单管理。
掩码模式,它把可接收报文 ID 的某几位作为列表,这几位被称为掩码,可以把它理解成关键字搜索,只要掩码 (关键字) 相同,就符合要求,报文就会被保存到接收 FIFO
通过配置筛选模式寄存器CAN_FM1R的FBMx位可以设置筛选器工作在哪个模式。通过配置筛选尺度寄存器CAN_FS1R的FSCx位可以设置筛选器工作在哪个尺度。不同的尺度和不同的过滤方法可使筛选器工作在图 的 4 种状态
⏩ 过滤器尺度寄存器CAN_FS1R
⏩ 过滤器FIFO分配寄存器CAN_FFA1R
⏩ 过滤器激活寄存器CAN_FA1R
⏩ 过滤器组i的寄存器x CAN_FiRx