SJA1000调试笔记(二)

啊啊,这几天继续忽高忽低的囧生活。啊啊,不说废话,开始说主题。

要调试SJA1000,第一个问题是联系到SJA1000。这个网上很多地方都有讲,即SJA1000是作为外部RAM扩展来使用的。呃,下面我就直接抄一段特权的笔记

AD0-AD7是地址/数据复用总线。因为这个电路是把SJA1000做外部RAM扩展了,所以它的电路连接也势必要符合外部RAM的连接要求。(特权同学也是第一次接触单片机的外部存储器扩展应用,所以开始的时候也很是纳闷,然后拿起课本一阵恶补后才恍然大悟。)先补一下外部扩展RAM的知识,然后再谈这个电路就容易多了:51单片机外部RAM的扩展最多是可以寻址64KB的,也就是最多可以有16条地址线来寻址,P0口是低八位地址扩展口,P2口是高八位地址扩展口。如果外部RAM不需要用到全部16条地址线(SJA1000就只有8条地址线),那么只要把低位地址线和外部RAM的相应地址线连接,高位的地址线在寻址时都默认为1,比如这里的SJA1000,它的8条地址线是和P0口相连接的,所以对SJA1000的寄存器寻址时的地址应该是FF00H-FFFFH,但是为什么PIAE提供的程序里的地址定义却是FE00H-FEFFH呢?这就要讨论CS信号的连接问题了,我们知道,CS是片选输入信号,只有当它是低电平时才能访问SJA1000。再看看它和谁连了?是P2.0口,正好是地址线高八位的最低位,如果按常理来说,寻址FF00H,那么P2.0就是高电平,SJA1000就不能被访问。所以寻址FE00H时才选通SJA1000,这时才是SJA1000寄存器的地址。

换言之,如果乃用的是我的电路,基址就是0x7F00。

第二个问题,SJA1000的内部寄存器的地址,作用,名称等等。弱智整理了一个表格,欢迎大家参考。如果需要对SJA1000有详细的了解,可参阅周立功翻译过的SJA1000中文说明sja1000应用指南。都是很好很强大的必备资料。

在对SJA1000有了基本的了解之后,接下来就是编程啦。网上的程序实在太多,各种稀奇古怪的功能也加了不少,对于弱智来说,调试时最需要的是一个只有最基本的功能的程序,不要什么指示灯,什么按键……那么,弱智就按着自己的需求,写了一个自以为还不错的Basic模式下的SJA1000B.c(等有时间的时候再写PeliCAN吧…最近很忙),可以作为SJA1000的驱动使用哦~(rr的说,其实是根据一个不知道什么时候存在电脑里的程序改的,不过那个源程序实在是漏洞百出,我花了很大的功夫修改,所以,只好感谢无名原作者,顺致痛恨之意)

顺大便说一下注意事项,需要注意的是公共寄存器的配置(即CDR,BTR和OCR)!这个地方如果出错,是很难发现的。因为木有软件设置断点查看的办法来检查。所以设置的时候,要慎之又慎。关于BTR的计算,继续推荐很好很强大的周立功的波特率计算器

接下来不可不知的,应该是ACR和AMR的使用。在一览表里,某什么也没写,是因为打算在这里说一下。。。

//此处待续

以上。

其实调试SJA1000并不难,难的是自己做一个SJA1000。(咳咳,发发牢骚,继续囧生活去了。)

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据