⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 报文格式说明.txt

📁 ARM下加一个硬件驱动比较复杂
💻 TXT
字号:
typedef struct 
 {
	 unsigned char ff;
	 unsigned char id1;
	 unsigned char id2;
	 unsigned char id3;
	 unsigned char id4;
	 unsigned char data[8];
}CAN_RPACKET;

  元素:
       ff:      报文格式
                       第7位为1表示扩展格式,报文标识符为4个字节
                             为0表示标准格式,报文标识符为2个字节
                       第6位为1表示远程幀
                             为0表示数据幀
                                   第0~3位表示报文数据长度
       id1:     报文标识符1 
       id2:     报文标识符2 
       id3:     报文标识符3 
       id4:     报文标识符4 
       data[8]: 报文数据,报文数据最大长度为8


其中,id1,id2,id3,id4我再作下简单说明:
     bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
id1: id28 id27 id26 id25 id24 id23 id22 id21
id2: id20 id19 id18 id17 id16 id15 id14 id13
id3: id12 id11 id10 id9  id08 id07 id06 id05
id4: id04 id03 id02 id01 id00 rtr   x    x   


分情况讨论下:如果是标准桢,那么只取id18-1d28共11位标识符;如果是扩展桢,那么取id0-id28共29位标示符。
其中,如果是接受包,在标准桢格式中,id17是rtr位,即远程桢,在扩展桢格式中,rtr位是远程桢标示位。这个桢的含义是:远程接受方发现一个数据报文错误,发出此桢,要求本地再把和这个远程桢相同报文标示符的桢重发一遍。所以,接受方如果接受到远程桢,需要作相应重发处理。



typedef struct _CAN_PORTSTRUCT{
	 enum fil filter;
	 enum lis lis_on;
	 enum tes test;
	 enum sle sleep;
	 enum bau baud_rate;
	 unsigned char code1;
	 unsigned char code2;
	 unsigned char code3;
	 unsigned char code4;
	 unsigned char mask1;
	 unsigned char mask2;
	 unsigned char mask3;
	 unsigned char mask4;
}CAN_PORTSTRUCT;
元素:
         filter:    报文接收筛选器模式:
                               SIN 一 单筛选器模式	默认
                               DOU 一 双筛选器模式                   
          lis_on:     是否只听模式
                               LOFF 一 正常模式	默认
                               LON 一 只听模式
          test:       是否自测模式
                               TOFF 一 正常模式	默认
                               TON 一 自测模式
          Sleep:      是否睡眠模式
                               SOFF 一 正常模式	默认
                               SON 一 睡眠模式
          baud_rate:  波特率 
                               B1000 一 1000kbit/s      B800 一 800kbit/s
                               B500 一 500kbit/s       B320 一 320kbit/s
                               B250 一 250kbit/s 默认  B160 一 160kbit/s
                               B80 一 80kbit/s         B40 一 40kbit/s
                               B20 一 20kbit/s         B10 一 10kbit/s
                               B5 一 5kbit/s           B125 一 125kbit/s
          code1:     接收码寄存器1
	  code2:     接收码寄存器2
          code3:     接收码寄存器3
          code4:     接收码寄存器4
          mask1:     接收屏蔽寄存器1
          mask2:     接收屏蔽寄存器2
          mask3:     接收屏蔽寄存器3
          mask4:     接收屏蔽寄存器4
code和mask寄存器和标示符寄存器是一一对应的,在接受时,can控制器会使用这2个数值和标示符按位做逻辑运算,所有结果都等于真即接受,非即忽略。
逻辑运算是:设id为A,code为B,mask为C,公式即为:  - -
					      (AB+AB)C

除与mask的置1位(无关位)对应的位之外,code和id的其余对应位逐位进行比较,若均相同(同为0或同为1),该报文被接收,存入报文接受缓冲器,否则删除。



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -