1、CAN总线学习心得:zlg关于can帖子汇总(一)2009-04-28 11:01SJA1000的常用标准波特率设置,为什么基本上都是单次采样?即使是低速的时候也是这样的,既然TSEG1的设置周期都很大,比如都大于10了,为什么不让他采样三次呢?答: 是不好理解,但那是CiA推荐的值。用51系列芯片和两个SJA1000接口还要外扩一个RAM,请问51的ALE能否同时与三个芯片的ALE管脚相连(地址不同)? 有哪位高手做过双SJA1000冗余的请指教! 答: 能同时连接。 请问CAN总线在想传输1000m的情况下,最快的速度能到多少呢? 答: 50kbps = 1300m。如果一个网络中只有2个
2、节点,其中一个处于监听模式,另一个节点发送报文会使处于监听模式的节点进入中断吗? 答: 能进入接收中断,你自己的试验也可以证明。想组建一个简单的CAN网络,已经有两个节点,我想问CAN总线如何组建,终端电阻安装在哪里?小弟还没有入门,大虾们指点一下。答1:直接将节点CANH和CANL连到总线上,终端电阻接在总线两端,大约120欧。答2: 推荐北航出版现场总线CAN原理与应用技术,研读一下。请问各位老师:我是一名can总线的新手,我正在做can总线的开发,控制器用sja1000t(我自己两个控制板互通),但我在发送数据后将出现总线关闭,我看到发送错误计数器在不断增加,直到0xff,最后恢复到0x
3、7f,谢谢各位老师帮我解答这个问题。或者对我给与启发答1;首先调通单个节点。答2:这是单节点发送没有成功(或者由于网络中其他节点没有收到帧并在响应场响应);建议参考网站CAN应用方案。我想请教各位can远程贞有何作用?如何应用?在什么情况下才需要用到远程贞?谢谢了!答:远程幀的用与不用完全取决你自己的协议,can有远程幀的功能,是可用可不用的!用网站提供的计算波特率的工具算出的数,12k以上的都正确,无论是自接收还是两个节点通讯都没有任何问题。但是12k以下的数据一个都不能用,两个节点通讯没有成功的,自接收有10k的几个数据成功。我们的项目要求必须在10k以下,最好是5k,但是不成功,自己计算
4、的数据也没有成功的。(我们至少试验了30多个,所有情况都考虑了。)我现在怀疑sja1000的波特率根本达不到5k和相对应的传输10km。或者可以谁能提供个经过实践检验的正确的总线定时器0和1的设置呢?要求低于10k。答:PCA82C250/251可以保证5KBPS的速率;比如ZLGCAN系列接口卡。答:tja1050在低速时好像有问题。我用1050进行5k的时候不行,用82c250很好,你可以试一试。我本想双机调试,一边收,一边发,但跑程序后,发送方会不断进入复位模式,所以现在进行自测试模式,我先进入复位模式,设置进入PELICAN模式,对寄存器初始化后,设置接收,发送中断使能,最后设置进入自
5、接收,单滤波模式,这样初始化就结束了,我的ACR0ACR3 为0x55,0x55,0x55,0x50,AMR0AMR3为0xff,之后,我就往BUFFER里填数,0x88,0x55,0x55,0x55,0x50,0x30,0x31,.0x37,之后,启动自接收请求命令,但是程序只进入了中断一次,是发送空中断,接收中断没有产生,我读发送错误寄存器,发现有错误产生,我读接收计数寄存器,为0,说明我没有收到数,但我读接收BUFFER时,值为0x55,0x55,0x55,0xff,0xff,0xff,0xff,0xff,0,0,0,0,0,以上测试时,我在CANH和CANL之间加入了两个120欧的匹配
6、电阻并联在一起的,请各位高手指点呀,谢谢了答:在总线上加个CAN接口卡会方便许多,或者加个捕获功能的示波器也可以检测波形。仿真环境:keil uv2编译器:keil c51 7.0仿真器:tks-591scpu:p87c591程序大小:8K左右兄弟在一片CPU中烧写了一个,运行一个CAN总线,IIC总线测试程序能够正常运行。这个基础上加上应用程序后在仿真机中运行正常,但是烧写到cpu后插入cpu程序不能运行,请问是什么原因?另外一个问题:在另外一个项目中条件相同,程序只有4K,程序正常跑着,CAN接口可以检测到输出波形但是却不能正确传输数据,在一块旧板子上就可以,比较两者之后发现电路完全相同测
7、量也正常,只是布局不同,请教原因。答:程序已运行了吧?可能是HEX文件有错;编制程序时注意P87C591的ERAM设置、6CLK设置。位流数据采样自发送节点的82c250的Tx管脚。测试条件:pelican ,扩展,双滤波模式,对方ID:0x88,0x11,0x55,0x10,发送的对方ID为:0x88,0x11,0x00,0x00,发送2字节数据为:0x05,0x06采集的位流数据如下:01000100000101110001000001000001000001000100000110000010001101100001001110111111111111请教位流数据的含义?答:自行计算时要
8、区分位,还需要进行“位填充”的逆运行;简单的方法是将此信号连接至1个CAN接口卡的RXD引脚。用ZLGCANTEST软件调试和板卡通讯,但是板卡能够正常通讯几次后就不再上传数据,查看SJA1K的状态寄存器,发现是SJA1K正在发送,但是怎么老是出现这种问题啊,请有相同经历的高手教小弟一把啊!谢谢了!答:其中的一个原因是收不到接受应答,比如对方id错误通讯实验:长度1km,同样的线路,得用ZLG公司的CAN设备(9820,5121)通讯是正常的,但是我们自已的系统,在1000米时(50K波特率)的通讯是完全正常的,但是再上加一段线路(约70米,与1公里电缆是不同线质,螺旋状),数据丢失严重.我们
9、的硬件是完全提供的参考电路的,所以说硬件上应当没有问题.软件上有没有什么特殊处理吗?比如说发送失败,总线错误如何处理?系统已经调试了相当长一段时间了,但还是没有头绪.就这个问题解决不了,我们在线路中加了CanRepA和CAN_REPB均不能很好的解决!同样的线路和硬件,ZLG公司的系统可以通信很好,而我们的系统却不呢,是不是软件处理有些要求?请大家指点!答:检查各节点CANH和CANL之间的阻值是否在合理范围之内;CAN网络通讯故障一般是通讯电缆选择不合适。请专家帮估计ARM CPU 的CAN口处理能力! 在不处理复杂协议的情况下,一个CAN口吞吐达最高负荷5000帧/秒时,CPU的负荷是多少
10、?多个CAN口呢(如LPC2294)答:即使用于严格的速度测试,LPC2000的速度完全能够胜任2-4个CAN通道。sja1000出现错误而中断的几率由多大呢? 特别是发送错误,总线关闭等。答:注意CAN-bus是一个网络,调试网络时需要在另一端连接一个正常工作的CAN节点。CAN是可靠的网络;测试过2-5个CAN节点连续近距离持续发送/接收超过100小时而不出现通讯错误。 为什么MiniCAN总提示发送失败? 我在使用MiniCAN在自发自收模式下进行循环发送数据时,会经常提示发送失败,但是却已经接收到了数据。这是什么原因?怎样能避免呢?答:是不是总线上连接有其他CAN节点?检查一下对方的速
11、率。 硬同步在CAN控制器中是如何实现的?答:可以看一下CAN2.0规范;如是IC设计,则去BOSCH看看复杂的CAN IP。请教zlg的大虾们,我应用89c51+sja1000+82c250的结构,运行过程中发现一个问题,即正常运行一段时间后,sja1000死机(个人认为是死机),我的89c51仍然在正常运行,也对sja1000能启动发送数据进程(我用led指示),但是接收端没有收到,用示波器测量82c250的 CANH 或 CANL 脚(6,7管脚),看不到有波形,断电重新启动程序后,sja1000的收发过程中能在上述两个管脚中测量到波形,即上电运行能正常一段时间的收发(能测量到波形),之
12、后就不行了(启动发送过程但是波形测量不到了),除非断电重启,望指教!头两天查找sja1000的问题,以为是死机,后来逐步检测跟踪察看,发现程序运行一段时间后,sja1000的设置被无端改变,比如波特率,输出控制方式,测试寄存器值,我的原始设置为:BTR0 = 0x00;BTR1 = 0x4F;OCR = 0x1A;REG_TEST = 0xAA;但在运行一段时间后,这四个值会莫名其妙的被改变了,导致无法接受总线得数据,而改变的值是随机的,请问这是怎么回事?硬件电路是按照推荐的典型应用接的,我在程序中除初始化设置这几个参数外没有其他地方对他们进行操作,天理何在啊答:复位端是否可能引入尖峰脉冲?
13、刚开始接触canbus,买了一块5121,用随机带的zlgtest的软件测试,验证码设为0x00000001,屏蔽码设为0xffffff00,这样的话是不是只能接受id为0x01的帧了,用随机带的zlgtest的自发自收的发现id为0x00和0x10等等也能接收到了,请问是我的验证码屏蔽码设置错了么?答:CAN节点的验收过滤设置与CAN帧的ID不是一一对应关系,具体请参考MANUAL目录下的函数编程手册或CAN控制器SJA1000验收滤波器原理与应用。谁能告诉我canbus的优势?CAN vs 485答:CAN和RS485不是一个层次的, CAN的速率和传输距离不是RS485可比的。CAN-b
14、us是技术开放的且最具成本优势的现场总线。现场总线的优势.大家都清楚吧? RS-485标准,提供了多点(32点,在增加驱动电阻的情况下可以连接128节点)、双向通信的能力,RS485只对接口的电气特性做出规定,而不涉及接插件、电缆或协议,因此用户可以建立自己的高层通信协议。RS-485最大传输距离约为1219米,最大传输速率为10Mb/s。CAN 总线当使用Philips P82C250作为CAN收发器时,同一网络中允许挂接110个节点。CAN 可提供高达1Mbit/s的数据传输速率,但数据传输速率与通讯距离成反比,高达1Mbit时通信距离只有40m。CAN总线使用CANopen或Device
15、Net有严格的协议,传输数据中ID号、功能号都占据传输数据的一定比例,因此CAN总线的数据有效传输率不高。网站文档CAN-bus 现场总线应用方案-RS-485升级.中有一些性能比较。单片机用的是51系列,c语言,如果SJA1000模式寄存器的地址为 OXC000,请问用什么样的命令来读写,然后判断该寄存器可以被正常读写。答:可以通过写入并验证SJA1000测试寄存器(地址:0x09,名称:REG_CAN_TEST)的数值来判断CPU与SJA1000的硬件连接是否正确。例如,第1次向SJA1000测试寄存器REG_CAN_TEST写入0x55并读出验证;如果通过,则再次向寄存器REG_CAN_
16、TEST写入0xAA并读出验证;如果2次验证均通过,说明CPU与SJA1000连接正确,否则需要检查相关的硬件连接。在基于CAN控制器SJA1000控制器的BasicCAN控制模块、基于SJA1000 CAN控制器的PeliCAN模块源代码中均有测试SJA1000硬件接口函数,函数名称为:SJATestInterface,用户可直接调用。以下程序为基于CAN控制器SJA1000控制器的PeliCAN模块中关于SJATestInterface函数的源代码。char SJATestInterface(unsigned char testvalue)char status=0;bit ErrorFl
17、ag =1;unsigned char ErrorCount = 0x20;unsigned char temp = testvalue; while(-ErrorCount)WriteSJAReg(REG_CAN_TEST,temp);if(ReadSJAReg(REG_CAN_TEST) = temp)temp =temp ;WriteSJAReg(REG_CAN_TEST,temp);If(ReadSJAReg(REG_CAN_TEST) = temp)temp =0;WriteSJAReg(REG_CAN_TEST,temp);ErrorFlag =0;break;else conti
18、nue;if(ErrorFlag)status = SJA_INTERFACE_ERR ;return (status);我最近在学习CAN控制器SJA1000,遇到了一个问题,希望那一为大虾能给予帮助,在此先谢了问题是这样的:如果一个SJA1000的节点(节点)接收到了一个远程帧,节点怎样知道,这一远程帧是那一个节点发来的?如果节点要给该节点以应答,识别码应该怎样写?答:需要有应用层协议才能区分网络的源节点、目的节点。求教大侠,用ADuC812开发CAN的时候,直接把89C51测试是正确的CAN发送程序(在程序开头加$MOD812)移植到ADuC812中去,把程序下载进去之后,运行正常(能不
19、停的向ZLGCAN卡发送数据);但是重新上电后,不工作了(没有数据上来);可是另外编了一个串口发送程序下载进去之后运行正常,重新上电也正常。我是想把ADuC812当89C51用(主要是想用它的AD)是不是除在程序开头加$MOD812外,还需要其它的设置?如果是,怎样设置?谢谢!答:硬同步。CAN控制器中如何执行硬同步?我板子上的sja1000+82c250,初始化,把发送的数据帧发到发送缓冲器都还可以,但是一设置命令寄存器的自接收命令和中止发送命令后,就在状态寄存器里的是:出错状态,发送缓冲器状态,然后TX错误计算超出127,ECC里的是03,位错,帧起始错.检查了好久也不行.请帮帮菜鸟的我吧
20、.55答:搜索论坛上过去的帖子,自收发需要满足几个条件。如何用串口发送连续的13位低电平和一位高电平就大部分的UART来看,都是8位,8位发的。要发送连续的13个0和1个1,请问如何实现。接收时又如何接收?答:前面有回复:变化波特率以适应硬件。DP-51H实验仪的一个功能:扩展LIN-bus接口,提供完整的“LIN-bus规范、应用范例及其软件包”,实现LIN-bus的通讯实验;两个通信完好的两个节点,如果节点CAN1发送了一帧数据,而这帧数据里的标志符不是另一节点CAN2的标志符,当发送以后,在应答间隙内,CAN2是否会发送一个显性位作为回应呢?书上说“当接收器正确地接收到有效的报文,就会在
21、应答间隙发出一显性位”,这里的正确接收是何概念呢?是完全满足验收滤波条件存入接收FIFO吗?答:在数据链路层检查正确,不需要经过验收过滤,就硬件回应。初次作CAN的项目,目前我有两个CAN节点,分别在回环模式下测试通过,波特率为125K,两节点直接将控制器的CANTX(CAN1)-CANTX(CAN2),CANRX(CAN1)-CANRX(CAN2)相连,现在CAN1能够向总线发送满足CAN2接收条件的报文,但不见CAN2回复期望的报文(CAN如果收到报文肯定会回复的)!不知为什么,请高手赐教!谢谢了 答:建议在总线上加一个标准ZLGCAN监控节点,监控总线的帧数据;只有2个原因:1、CAN2
22、没收到; 2、CAN2已发送,CAN1没有收到。自答:原因是:由于我的两个can控制器不同CAN1使用SJA1000,CAN2使用的是MCP2510,这两个控制器的标识码寄存器位定义不同,我先前没有注意到,所以报文无法正确的被接收!还是很感谢黄老师:)请问,它的两个输出端分别接个5欧电阻,并且挂30P电容接地应该可以起到滤波的作用吧,如果节点太多会使电平保持的时间太小吗?(就是变成三角波了)答:节点数目在大于3050时可以考虑不用PCA82C250滤波电容和电阻。我在实验室调试两个CAN节点的通信,终端匹配电阻均为124(电位器,用万表测试),SJA100082C250,加斜率电阻。速率800
23、K,在斜率电阻一个为9.6K,另一个为6.8K(也是电位器)的情况下可以通信,通信距离35米(普通网线),斜率电阻再大就不能保证了。另外在连接时必须是一个节点的CANH接另一个节点的CANL。按书上的接线示意图将CANH共同接在同一根总线上,CANL共同接另一根总线上就不通,为什么?答:这个方法是错误的,供参考的正确电路连接图可以从CAN-bus页面的应用方案中下载获取。自己开发了一个CAN节点,要与PLC通过CAN通讯,由于一个网上所有CAN节点BTR0、BTR1的参数应一致,PLC各波特率的BTR0、BTR1参数不知,那么我自己开发的CAN节点这两个参数如何定? 答:编写个自动检测波特率程
24、序;PLC一般也可设定。 问:SJA1000的双相输出方式具体该如何应用,如果不接PCA250,怎么接到总线上?答: 还是要接PCA82C250芯片。问:关于CAN总线供电的请教: 如果用电源耦合能否实现CAN的总线供电?答:建议用标准双绞线方式;走的人多了,不需要自己研究。问:光靠标准双绞线怎么能实现总线供电呢?答:总线供电另外采用独立的电缆,如 DeviceNet 规范;这是国际推荐的标准方式。问:请问CAN总线两节点间要通信的话,他们的波特率是不是要完全一致?答:节点有重同步的功能,允许偏差在一定范围内,比如晶振偏差,见SJA1000的位定时文档。问:请问验收滤波器可不可以屏蔽某些位,就
25、是说不管某些位是什么,只关心其中几位。答:当然可以啊。问:我现在调试通过CAN通讯的数据采集板,上位机买的是的PCI_CAN9810卡,用CANalyst分析仪调试自己开发的CAN采集板,我现在调试CAN,还没有调试通,CAN的CS接CPU(P89V51RD)的P2.7(28脚),CAN地址是7fff,应该没错吗?程序如下(用伟福仿真器仿真):# include# include# include# define uchar unsigned charvoid InitCpu(void);void InitT0(void);void Sja1000Init(void);bit SecFlag;
26、/uchar data a5;uchar data SendData10,RcvData10;uchar DataBuf,SecData,Second;uchar data TmodData;uchar bdata FlagInit;sbit RcvFlag=FlagInit0;sbit ErrFlag=FlagInit2;void main(void) /int i; /for(i=0;i100;i+) /P1_4=1; Sja1000Init(); InitT0(); InitCpu();/ flaginit(); while(1) if(RcvFlag) RcvFlag=0; BCAN_
27、DATA_RECEIVE(RcvData); BCAN_CMD_PRG(0x04); /release buffer if(SecFlag) SecFlag=0; SendData0=0xaa; /send canid SendData1=0x08; /send longth SendData2=Second; /send data BCAN_DATA_WRITE(SendData); BCAN_CMD_PRG(0x01); if(ErrFlag) ErrFlag=0; Sja1000Init(); void Ex0Int(void) interrupt 0 using 1 SJA_BCANA
28、dr=REG_INTERRUPT; FlagInit=*SJA_BCANAdr;void T0Init(void) interrupt 1 using 2 TR0=0; SecData-; if(SecData=0) SecData=0x10; TH0=0x80; TL0=0x60; SecFlag=1; Second+; TR0=1;void InitCpu(void) PX0=1; IT0=1; EX0=1; ET0=1; EA=1; SecData=0x10;void InitT0(void) TmodData =TMOD; TmodData &=0xf0; TmodData =0x01
29、; TMOD =TmodData; TH0 =0x80; TL0 =0x60; TR0 =1; SecData=0x20; Second=0x00;void Sja1000Init(void) BCAN_ENTER_RETMODEL(); BCAN_SET_BANDRATE(0x04); /100k BCAN_SET_OBJECT(0xaa,0xff); BCAN_SET_OUTCLK(0xaa,0x48); BCAN_QUIT_RETMODEL(); SJA_BCANAdr =REG_CONTROL; *SJA_BCANAdr = 0x0a; /现在用示波器测CAN_H和CAN_L,没有信号
30、,请问是什么问题?注:这个参考一下吧,呵呵问: 请教各位大虾:有没有CAN局部测试程或意见?急需!谢谢!有没有人能给他的自测程序给我看看?帮帮我呀!答:网上有basicCAN例程,CANstarter-I 工具中有PeliCAN例程。问:我贴一下关于CAN验收滤波器的程序:哪里不对,请指教。多谢多谢了。BPS_307K EQU 0x00F88001 ;波特率307KAF_RAM EQU 0xE0038000 ;验收滤波器RAM起始地址 LDR R0, =CANAFMR MOV R1, #0x02 STR R1, R0 LDR R0, =AF_RAM LDR R1, =0x25522553 ST
31、R R1, R0/我在上面设置了一个25522553,CAN控制1口,只接收标识符为552,553的帧,我不知道这样设置对吗?这算设置了一个表格吗? LDR R0, =CANAFMR MOV R1, #0x00 STR R1, R0/这样算是启动了吧?我没有设置CANSFF_sa滤波器,可以不设置吗?如果需要设置,照我现在的情况,这个滤波器中应该填什么值呢?/在以上设置好以后,所有的总线数据都不响应了,急死我了,我看了网上的pdf文档,不过还是没什么启发。希望高手能解答我的疑惑。谢谢了答:参考或直接使用CANstarter-II开发套件中提供的资源。问:请问各位高手,作为一个初学者应该如何学习
32、CAN总线技术?应该先学习哪一些基本知识,请推荐妨相关书籍一二。谢谢!答:现场总线CAN原理与应用技术作者:饶运涛 邹继军 郑勇芸出版社:北京航空航天大学出版社问:又没有带CAN控制器的可在线编程的8位单片机呢,麻烦推荐一款吧 答:ATMEL AT89C51CC0X 系列不错!答:intel的89C591,89C592都是片内带can的8位单片机。问:本来应用了,但是想提高系统的速度,想用,做,但是想借此学习,或,这里能想一样,如果买了板子,提供代码,原理图吗?如果没有哪种开发板有呢,能推荐一下吗?答:系统而理论地学习CAN,建议选择CANstarter-I/II开发套件;应用的话,USBCA
33、N、PCICAN都是非常可靠的产品。问:请问,在SJA1000软件设计中,把发送信息送入发送缓冲区,启动发送后,为何总是会自动进入复位模式?请哪位大侠帮忙指教一番.问:再问一下,之后我重新换了线路板和芯片,复位问题没有了,但启动发送后检测状态位,发现发送状态一直为(始终发送未完成)。需要说明一点,目前我只用了一块线路板加一个仿真器进行发送调试,并没有接上接收的线路板,请问单发行否?请大侠帮忙指点以上问题!谢谢!答: 一个节点可以工作在自测试模式,在这个模式下的工作机制跟两点是一样的,然后启动自接收命令即可。答: 单发送不可, 正常发送时需要网络上同一速率的工作节点响应. CAN总线学习心得:z
34、lg关于can帖子汇总(二)2009-04-28 11:02问:第一,接收信息的工作节点需要什么响应来确认?第二,接收的子程序未调好是否意味收发两方均无法调试?如何确认发送成功?答:网络上同一速率的正常工作节点响应:1、已设定速率;2、在工作状态。完全是由硬件(比如:SJA1000芯片)完成ACK确认。问:请问单个can 节点可以进行调试吗?是一块一路的can适配卡,使用端口地值300h,我使用winio进行读写的,可为什么,所有的单元读出来得数据都是ff?是因为只使用了单个节点can控制器不能正常工作吗?答:sja可实现单节点调试;ff应该是地址空间错误;问:我还是不太明白,你说的地址空间错
35、误,是说sja1000的地址没有选通,地址没有指向sja1000的寄存器吗?答:首先把读写片选信号产生了再去管sja1000吧。问:我用验收滤波器来选择接收CAN2.0B的一帧数据,29位中只对其中几位进行判别,其他位又不是定值,请问这该怎么办?可不可以掩住不关心的位?用范围应该也可以实现,不过那样感觉不好,请教大家,谢谢!答:相关/不相关位最终都可以转化为范围描述。问:请教关于2119 can验收过滤器的问题请问:1、在canstarterii应用指南第42页中提到的“fullcan标准地址”与“标准单个地址”有何区别? 2、第45页表2.34的“值”“字”“行”“id索引”是什么概念?答:
36、fullcan标准地址放置的是需要自动执行接收存储的id索引表格(fullCAN功能,查看相关的介绍);标准单个地址仅仅是AF接收/屏蔽标准id的索引表格,即和一般的接收过滤理解一致。答:fullcan模式下自动把符合的帧放在后面的ram里 标准单个把符合的数据放在接收寄存器中问:将“LPC 系列ARM 微控制器的CAN 接收过滤设置” 一文中的LTU.hpp加入原来的工程中(原来是用c做的),编译时有好多错误,用的确实是C编译器,可感觉它对c中的关键词不认识,请大家指教,谢谢!答: 里头好像仅仅作用域符号“:”不是C的之外没什么特别之处。问:以前我用的是485通讯,通讯协议里面都定义了包起始
37、和包结束(CRC可以帮助验证是否包结束)。而对于CAN这个东东,比如我要发送一个信息包有100个字节,发送倒没有问题,对于接收端,我怎样去判断包起始和包结束呢?困惑ing请斑竹和各位大虾们指教!答:CAN-bus由硬件完成帧的错误控制、数据处理,因此,协议比RS-485会方便许多。比如扩展帧格式:帧头(源地址、目的地址、命令字、辅参数) 数据场(分段码、07个数据) 超过8个字节/帧时,需要分帧处理。 具体方式,可以参考网页的CAN应用方案中通讯协议篇、RS-485升级篇。问:我的应用为:一个主机(计算机)会和很多的从机连接,每个从机都将通过网络连接,所以必须使用HUB,你们的ZNE-100将
38、接在HUB上。计算机只要和HUB连接就可以了。不知道我该如何设置ZNE-100?还有此HUB还能连接其他的计算机吗?答:ZNE-100嵌入式以太网转串口模块使用说明 问:对sja1000进行硬件复位时,要求sja1000的片选同时有效吗?比如用138译码器的y1选通sja1000的复位线,来达到使sja1000复位的目的,那么此时要求片选线有效吗?答:见SJA1000数据,异步操作,不要求片选有效。问:请问怎样把sja1000分时复用AD总线与pc104的数据线和地址线连接? 答:周立功公司已经有现成的“PC104-CAN”接口卡提供。问:DP51+上BasicCAN测试程序的问题 在DP51
39、+上用BasicCAN测试程序按键操作向其它节点发送数据时,总出现E-F8的错误,检查连线和波特率的设置也没有问题,真不知道是什么原因?也没法收到其它节点发送过来的数据。有可能这是收发器TJA1050T出现问题了吗?答:可能是组建的CAN网络中有其他节点未设置正确,比如波特率.ZLG公布的代码都经过测试,附有文档说明。问:在开发过程中遇到如下问题:(公司没有上ARM,出于对其狂热的追求,自己出银子买的DEMO板)1:想完成自发自收,CANMOD_STMBIT=1,CANCMR_SRRBIT=1,观察寄存器窗口,接收REG 内容没有发生变化,(自测模式是否需要搭建一个CAN总线平台?我只有一个D
40、EMO和 一个自己做的CAN总线收发器),接收中断也未发生,用的是周工最新的驱动.2. 如果只想接收ID为0x1234的信息,不用FULLCAN模式,该怎样设置才对呢?是不是这样:eFullCan禁能,则只需设置标准帧单个起始地址REG,把相应的ID填入就行了呢3. 每次调用 CanSendData(CAN1,cSlfSendCmd,TempBufPt),都将导致CANMOD_RM=1,发送错误计数器累加,好象是总线离线状态.郁闷啊还请斑竹和大虾们指点迷津答:CAN总线至少需要2个节点才好调试,要不怎样才能组成总线呢? 答:网站可以下载代码,请参照配套的文档进行测试。至少要加CAN收发器、终端
41、电阻,建立再在PC上安装1个CAN接口卡,比如CAN232接口卡。回复:原来采用的总线收发器的前端光耦出了问题!谢谢大家了!特别感谢周立功的技术支持工程师!问:如果要在CANBUS上供电12V或27V,该怎么做?因为CAN是平衡传输,要用差分信号来同步,现在要提高电平,该怎么做,以前请教过,但都只是说设计接口电路就可以实现,但是太模糊了,能否有过经验者提供一点有实际操作的思路。感激不尽。感谢你的关注!答:1,加一组电源线;2,收发器就是差分驱动器。问:如果加电源线那还是总线供电吗?我的意思是两条线上既传信号又传电,请教可以做到吗?答:在CAN应用中的总线供电常指的是通过4芯或5芯通信线缆供电;
42、收发器出来的仍然是基带信号没有调制的所以不容易实现线缆复用。问:请各位高手解决:SJA1000收发扩展帧正常,但是不接收标准帧答:我认为SJA1000不会出现这种现象,除非发送方有错误.问:对FullCAN模式不是很理解,哪位老师给详细介绍一下,谢谢! 答:简而言之,就是验收滤波方式的增强,BasicCAN只有一种滤波,PeliCAN有2种滤波,可以加上广播信息,而FullCAN就是有更多种滤波。问:急,请各位老师近来看看2119 CAN验收滤波器问题 设置如下:我用的是汇编:AF_MEM EQU 0xE0038000LDR R0,=AF_MEM ;读取验收滤波器RAM的起始地址LDR R1,
43、#0x25522553 ;我需要标识为552和553的接收,CAN1控制器STR R1,R0LDR R0,=AFMR ;读取验收滤波器模式寄存器地址MOV R1,#0x00 ;这样启动滤波器对吗?STR R1,R0这样的情况下,CAN1接收中断不响应任何数据,这是为什么?中断机制完好,旁路滤波器时候全部响应的.关于CANSFF_sa寄存器该如何设置才能完成滤波接收?请指教。答:修改RAM表格前应该先置位AccBP位LDR R0,=AFMR ;读取验收滤波器模式寄存器地址MOV R1,#0x02 ;置位AccBP,以便设置过滤表格STR R1,R0答:参考 问:在使用周的底层驱动时出了点问题,不知是什么原因 用LPC2119中断方式做了一个转发器件,中断很正常,中断程序调用写环形环形缓冲区;主程序是读环形缓冲区,但是读时发生了数据中止,不解,就是下面第二句出了问题