Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1249376
  • 博文数量: 479
  • 博客积分: 12240
  • 博客等级: 上将
  • 技术积分: 4999
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-24 17:12
文章分类

全部博文(479)

文章存档

2014年(1)

2013年(1)

2012年(1)

2011年(95)

2010年(177)

2009年(167)

2008年(16)

2007年(21)

分类: LINUX

2010-09-06 11:24:41


zlg-sja1000-read这个程序打开的是/dev/SJA1000_CAN1设备也就是CAN1。程序中没有显示设置波特率,也就是用的是默认的波特率1M。程序中设置了单滤波器,设置SJA1000AC寄存器如下:

AC REG0 = 0AC-REG1 = 0AC REG2 = 0AC REG3 = 0xa0;

AM REG0 = 0AM REG1 = 0AM REG2 = 0AM REG3 = 0

因为AM寄存器设置为全零,所以程序只接收AC中指定的ID号数据。如果接收的数据为扩展帧,则只接收帧ID号为0x00000014的帧。如果接收的数据帧为标准帧,则只接收帧ID号为0x0000,数据场的前两个字节分别为data[0] = 0data[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个扩展数据帧。数据帧的ID0x00000000,数据为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      设置波特率,需要带上一个波特率值的参数,参数值有如下这些:

100000080000050000040000025000020000016000012500010000080000625005000040000312502500020000160001562512500100008000781361505000

-d –dual          设置双滤波模式,不需要参数,如果没有这个选项则是单滤波。

-f –filter         设置滤波器。需要带上参数。参数按照如下格式:0011223300112233

其中冒号前面的数是十六进制表示方式,00这两个值将写入ACreg0寄存器,11写入ACreg1寄存器,22写入ACreg2寄存器,33写入ACreg3寄存器。冒号后面的数据也是十六进制表示方式,与前面的类似。例如只接收扩展帧ID号的01位为1的数据帧,则设置如下:

-f 00000018:ffffffe7

不接收远程帧:

-f 00000000:fffffffb

-e –echo               当收到数据后,立即返回相同的数据给发送方。不带参数

-i –increase     定时发送的数据需要递增它的ID号。不带参数。

-m –message  发送指定的数据。这个选项后的参数一定要按照如下格式:

每个字段都以冒号分隔,以i开头的字段识别为ID号,以d开关的字段识别为数据,eff段为扩展帧,sff为标准帧,rtr为远程帧。

如果要指定帧为扩展帧,就写上eff;如果指定帧为标准帧,就写上sffeffsff只能二选一。如果要发送的帧为远程帧,就写上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

如果要生在一个标准的数据帧,帧ID0x3344,数据为”ZLGMCU”,则如下所示:

--message sff:i3344:d5A4C474D4355

其中’Z’字符的ascii码为0x5A, ‘L’0x4C, ‘G’0x47等。

-c –count              指明需要发送多少次数据。

-F –frame      指明每次发送多少帧数据。

-I –internal      指明每次发送数据的间隔。单位为毫秒。

打开/dev/SJA1000_CAN1设备,用默认的波特率和滤波器,波特率为1M,滤波器为不滤波。将帧设为扩展帧,ID00000000,数据为data[0] = 0xaadata[1] = 0xbbdata[2] = 0xccdata[3] = 0xdddata[4] = 0xeedata[5] = 0xffdata[6] = 0x11 data[7] = 0x22。递增发送的数据帧的ID号,每次发送10帧数据帧,发送10次。

发送成功则有如下截图:

第一列为发送的序号;第二列为标识发送还是接收,如果是发送的帧则为“SEND”,否则为接收的帧“RECV”;第三列为帧ID;第四列为标识帧类型为数据帧还是远程帧;第五列标识帧为扩展帧还是标准帧,第六列为数据长度,第七列为数据。


阅读(2018) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-09-07 08:55:35

Download More than 1000 free IT eBooks: http://free-ebooks.appspot.com