[CAN-bus/DeviceNet] 一头雾水

[复制链接]
 楼主| wxj1952 发表于 2007-6-16 17:30 | 显示全部楼层 |阅读模式
SJA1000的16~28号寄存器地址,复位模式下是ACR和AMR,操作模式下是TXB和RXB,那么,是不是说,SJA1000内部有3个相同地址的寄存器(堆)——ACR/AMR,TXB,RXB?<br />是这样认为吗?
桂电飞天鼠 发表于 2007-6-16 19:40 | 显示全部楼层

同问

根据求是科技出的一本《单片机通信技术与工程实践》上关于CAN总线内容:<br /><br />工作模式:&nbsp;读/写&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;复位模式:&nbsp;&nbsp;&nbsp;读/写<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;16&nbsp;&nbsp;&nbsp;帧信息&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;验收代码0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;17&nbsp;&nbsp;&nbsp;识别码1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;验收代码1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;18&nbsp;&nbsp;&nbsp;识别码2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;验收代码2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;19&nbsp;&nbsp;&nbsp;识别码3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;验收代码3<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20&nbsp;&nbsp;&nbsp;识别码4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;验收屏蔽0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;21&nbsp;&nbsp;&nbsp;数据1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;验收屏蔽1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;22&nbsp;&nbsp;&nbsp;数据2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;验收屏蔽2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;23&nbsp;&nbsp;&nbsp;数据3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;验收屏蔽3<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;24&nbsp;&nbsp;&nbsp;数据4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;25&nbsp;&nbsp;&nbsp;数据5<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;26&nbsp;&nbsp;&nbsp;数据6<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;27&nbsp;&nbsp;&nbsp;数据7<br /><br />根据这本书的内容,按我的理解,TX,RX与AMR/ACR地址确实是相同。<br />
 楼主| wxj1952 发表于 2007-6-17 10:38 | 显示全部楼层

有没有不同解?

看来写书的人也只知道照抄/翻译手册而以。关键是:硬件设计上来说,为什么要这样做?<br />刚看了一篇**,意思是说“标准答案总是有质疑的。”后来美国的考试题修改为没有标准答案,只看谁有创意答案。例如:“你手上有一块砖头,请说出它的50种用途。”这样培养/选拔出来的学生,真是太可怕了。<br />&nbsp;&nbsp;&nbsp;我们现在手上有一本SJA1000数据手册,它表面叙述上看,ACR、AMR、TXB/RXB是同地址,这好像是标准答案。后来,huwanbin网友质疑:“既然TXB、RXB同地址,那么RXB数据必然等于TXB发送数据,(实验结果也是一样。)自测试有什么意义?”<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;这是对标准答案的质疑,他至少说出了砖头的另一种用途。
桂电飞天鼠 发表于 2007-6-17 10:44 | 显示全部楼层

确实是呀~~

当看到这个问题,就知道要的肯定不是标准答案~
coolhu 发表于 2007-6-18 17:48 | 显示全部楼层

rt

是不是类似于51的RX,TX,地址一样,但在内部是分开的
 楼主| wxj1952 发表于 2007-6-20 08:41 | 显示全部楼层

如果没有框架/规矩限制.

我说16~28地址的TXB、RXB根本没有实际的寄存器存在,它不过是2个窗口,2个“孔洞”而已。可以通过实验来证明这一点。<br />.......<br /><br />因此,实际上的16~24地址有唯一寄存器ACR/AMR。25~28地址暂时保留以后用,读恒为0。<br />
 楼主| wxj1952 发表于 2007-7-26 20:45 | 显示全部楼层

关于“空洞”

&nbsp;&nbsp;&nbsp;发送缓冲区与接收缓冲区实际上不是同一地址,16~28的RAM只是2个窗口。真正的发送缓冲区在96~108,接收缓冲区在32~95。如果实验(在复位模式下)往96~108里写数据,然后CMR.0启动发送,与程序中send()函数由16~28写入发送缓存,发送结果一样。<br />&nbsp;&nbsp;&nbsp;&nbsp;操作模式下,96~108只读不可写,数据是通过窗口16~28写入的。16~28窗口比喻起来就好像是一个餐厅的传菜口。仅仅是个“孔洞”,没有硬件内存的。<br />&nbsp;&nbsp;&nbsp;&nbsp;接收缓存RXB也是如此,接收到的数据实际是写到了RAM地址32~95里。程序读出的只是从16~28窗口看见的部分。比喻起来RXB就象是轮船的货舱口,每吊出一“帧”货物之后,就要把里面的货物往舱口移,......只是货舱操作是先入后出FIBO罢了。<br />&nbsp;&nbsp;&nbsp;&nbsp;RX寄存器(RAM地址29)是报文计数器,它记录了所接收到的报文数目,每接收到一帧报文,RX加一。RBSA寄存器(RAM地址30)是指针,指向64字节FIFO接收缓存RX中未读取报文的起始地址。每次执行释放命令CMR=4,RX减一,RBSA+DLC+3/5,指向新的报文起始地址,FIFO接收缓冲区滚动,RBSA指向下一帧接收区,相当于窗口移动,窗口内数据更新。......反复进行,直到RX=0,接收中断位RI才等于0,接收缓冲器状态位RBS也才等于0。<br />&nbsp;&nbsp;&nbsp;&nbsp;可见,接收缓存RXB窗口所看到的数据内容总是FIFO内以RBSA所指向的起始地址的13字节数据内容。<br />&nbsp;&nbsp;&nbsp;&nbsp;这些内容书上写的挺清楚的。没有强调的是RX和RBSA的联动行为,以及SR.0/IR.0与RX的关联关系。<br /><br />
桂电飞天鼠 发表于 2007-7-27 14:14 | 显示全部楼层

不错,受教了~~~

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

38

主题

757

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部