工控主板EM9170的CAN通讯应用说明

 2013-4-26         

        EM9170工控主板采用FlexCAN,有关filter的设置,说明如下。

 

        CAN Filter的设置:通过DeviceIoControl的CAN_IOCTL_SET_FILTER命令来设置,输入参数为数据结构:

 

        typedef struct
        { 
                DWORD dwGroup;        // 组号,= 0,1,2
                DWORD dwType;          // = 0:标准帧;= 1:扩展帧
                DWORD dwID;               // 标准帧:11-bit;扩展帧:29-bit,右对齐
                DWORD dwRTR;          // = 0:数据帧;= 1:远程帧
                DWORD dwMask;         // 各位与dwID对应,= 0:该位不检查;= 1:该位须检查
        } CAN_FILTER, *PCAN_FILTER;

 

        对以上数据结构中各个参数的定义解释如下:

          DWORD dwGroup:组号,EM9170的CAN接收Buffer共分成3组,可同时接收不同ID组的数据帧。EM9170的多个分组,类似于SJA1000中的双滤波概念,即总线上的数据

            帧只要满足任意一组设定的条件,该数据帧将被接收。

          DWORD dwType:设置本组接收数据帧的类型。

          DWORD dwRTR:设置本组接收的是否为远程帧。

          DWORD dwID:用于定义本组接收的数据帧ID的公共部分,即相同部分。 

          DWORD dwMask:用于定义需要匹配的bit位,即置1的bit位。dwMask与dwID需要配合使用,举例说明如下:

 

        例:本组为标准帧包括连续的64个ID号,dwID = 2’b01010000000 = 0x280,相应的dwMask = 2’b11111000000 = 0x7C0。这时的dwMask表示可被接收的数据帧的低6位ID可以是任意编码(设置为0的那些位),但其高5位(设置为1的那些位)必须与dwID的高5位的定义匹配,即为2’b01010xxxxxx。在实际应用中,为了便于理解,CAN地址的划分,通常采用低位分配给各个设备,而高位地址作为应用组标志。而每一个应用组的地址数采取2的幂次方,可方便设置dwMask。