分类: LINUX
2010-09-06 11:24:41
zlg-sja1000-read这个程序打开的是/dev/SJA1000_CAN1设备也就是CAN1。程序中没有显示设置波特率,也就是用的是默认的波特率
AC REG0 = 0;AC-REG1 = 0;AC REG2 = 0;AC REG3 = 0xa0;
AM REG0 = 0;AM REG1 = 0;AM REG2 = 0;AM REG3 = 0;
因为AM寄存器设置为全零,所以程序只接收AC中指定的ID号数据。如果接收的数据为扩展帧,则只接收帧ID号为0x00000014的帧。如果接收的数据帧为标准帧,则只接收帧ID号为0x0000,数据场的前两个字节分别为data[0] = 0,data[1] = 0xa0的帧。
程序启动时打印如下信息:
ZLG ZCAN Message Read Example Program
Initializing SJA1000 hardware
Receiving data ...
如果发送方发送完后,在终端上输入Ctrl+C命令中断程序的执行,会看到如下输出:
Interrupted by user ... exiting.
Messages received: 1
Bytes received: 8
Messages error : 1
zlg-sja1000-write程序打开的是/dev/SJA1000_CAN1设备也就是CAN1。程序中设置波特率为500K,向外发送1000000个扩展数据帧。数据帧的ID为0x00000000,数据为55 aa 55 aa 55 aa 55 aa。如果发送成功,则在输入Ctrl+C中断程序的发送时,就会打印已经发送了的帧数信息。发送完1000000帧数据后程序自动结束,打印信息如下:
SJA1000 Message Write Example Program
Initializing SJA1000 hardware
Transmitting data ...
End of file transfer
Messages transmitted: 1000000
Bytes transmitted: 8000000
发送完1000000帧数据需要很长一段时间。
附,另外一个测试程序,附源码。
使用说明:
文件: Example.zip 大小: 7KB 下载: 下载
zlg-sja1000-test程序提供了一个通过命令行参数设置波特率、滤波器、发送帧的格式与数据、一次发送多帧、定时间隔发送等功能。以下先说明一下命令行参数。
-b –bitrate 设置波特率,需要带上一个波特率值的参数,参数值有如下这些:
1000000、800000、500000、400000、250000、200000、160000、125000、100000、80000、62500、50000、40000、31250、25000、20000、16000、15625、12500、10000、8000、7813、6150、5000。
-d –dual 设置双滤波模式,不需要参数,如果没有这个选项则是单滤波。
-f –filter 设置滤波器。需要带上参数。参数按照如下格式:00112233:00112233
其中冒号前面的数是十六进制表示方式,00这两个值将写入AC的reg0寄存器,11写入AC的reg1寄存器,22写入AC的reg2寄存器,33写入AC的reg3寄存器。冒号后面的数据也是十六进制表示方式,与前面的类似。例如只接收扩展帧ID号的0、1位为1的数据帧,则设置如下:
-f 00000018:ffffffe7
不接收远程帧:
-f 00000000:fffffffb
-e –echo 当收到数据后,立即返回相同的数据给发送方。不带参数
-i –increase 定时发送的数据需要递增它的ID号。不带参数。
-m –message 发送指定的数据。这个选项后的参数一定要按照如下格式:
每个字段都以冒号分隔,以i开头的字段识别为ID号,以d开关的字段识别为数据,eff段为扩展帧,sff为标准帧,rtr为远程帧。
如果要指定帧为扩展帧,就写上eff;如果指定帧为标准帧,就写上sff;eff和sff只能二选一。如果要发送的帧为远程帧,就写上rtr。指定帧的ID号要以i开头,后面带上ID号的十六进制的表示方式。指定帧的data部分的数据要以d开关,后面带上数据,数据的每个字节是以十六进制明文的方式指定的。例如:
--message eff:i001122:d0011223344556677
这是生成一个扩展帧,ID号为0x001122,数据长度为8,数据为data[0] = 0x00, data[1] = 0x11, data[2] = 0x22 data[3] = 0x33 data[4] = 0x44 data[5] = 0x55 data[6] = 0x66 data[7] = 0x77。
如果要生成一个远程的扩展帧,帧ID号为0x123,则如下所示:
--message eff:rtr:i123
如果要生在一个标准的数据帧,帧ID为0x3344,数据为”ZLGMCU”,则如下所示:
--message sff:i3344:d
其中’Z’字符的ascii码为0x
-c –count 指明需要发送多少次数据。
-F –frame 指明每次发送多少帧数据。
-I –internal 指明每次发送数据的间隔。单位为毫秒。
打开/dev/SJA1000_CAN1设备,用默认的波特率和滤波器,波特率为
发送成功则有如下截图:
第一列为发送的序号;第二列为标识发送还是接收,如果是发送的帧则为“SEND”,否则为接收的帧“RECV”;第三列为帧ID;第四列为标识帧类型为数据帧还是远程帧;第五列标识帧为扩展帧还是标准帧,第六列为数据长度,第七列为数据。
chinaunix网友2010-09-07 08:55:35
Download More than 1000 free IT eBooks: http://free-ebooks.appspot.com