阅读:1423回复:7
请教:利用SAA7146的I2C总线可以一次性发送或读取多个字节吗,比如10个字节?
SAA7146(master)通过I2C总线向其它芯片(slave)写数据时,首先给出Slave的地址、Slave内积存器的地址,然后才是一个数据。这样,一次操作只能完成一个数据。
请各位大侠指教!小弟不胜感激! |
|
最新喜欢:badluc... |
沙发#
发布于:2003-10-07 15:50
应该不行吧!
比如你对从片的某个寄存器操作,一次只能传送一个数据。 你一次传送10个数据的话,slave又不知道后面的数据是给哪个 寄存器的。无法识别的呀! [编辑 - 10/7/03 by link_bridge] |
|
板凳#
发布于:2003-10-07 16:16
其实我是想实现SAA7146通过I2C总线与一个芯片的通讯,这个芯片的对I2C总线的时序要求如图。
我的直观感觉是可以实现的,理由有如下三条: 1、I2C总线协议中没有规定一次只能传送一个有效数据; 2、I2C总线协议是PHILIPS提出的,而SAA7146是PHILIPS的芯片,且芯片资料上也没有明确指出只能这样操作。 3、如果在第一次的3个字节(包括两个地址字节)传送完毕,且第三个字节的属性为“continue”的话,在得到最后一个ACK后,发送第二次的数据(比如三个字节全为数据),slave应该可以收到。 以上为个人主观猜测,无实际经验,请各位大侠指条明路。 |
|
地板#
发布于:2003-10-07 16:19
图
|
|
地下室#
发布于:2003-10-08 09:52
可以一次多个数据。
|
|
|
5楼#
发布于:2003-10-09 12:25
如果在第一次的3个字节(包括两个地址字节)传送完毕,且第三个字节的属性为“continue”的话,在得到最后一个ACK后,发送第二次的数据(比如三个字节全为数据),slave应该可以收到。
完全正确! |
|
6楼#
发布于:2003-10-09 21:47
可以传n个连续的,只不过得3个一组,第一个应该是地址,第二各及以后的填连续模式,最后一个填终止模式,仔细看看数据手册。
每3个一组,得每传一组后不断检查完成和出错状态,以确认是否可以传下以组,我用7146和lpc932单片机传过,我最多一次连续传了33个byte |
|
7楼#
发布于:2003-10-10 14:09
大家回去看看I2C芯片的规范吧,比如24LC02。 什么3个一组阿,乱七八糟。对于SAA7164,理论上你可以发无限个数据。 start-device address-word address-data。。。data-stop
但是由于I2C device芯片buffer大小的问题,导致host一次不能发太多数据。比如24LC02,它的buffer大小是8 byte,所以host端每发完8个dada,就要中止发送,然后等待一段时间让device芯片完成写入动作。 对于读操作,喜欢读多少个就读多少个。你连续读它10000万次都没有问题,因为它内部采用的是地址循环滚动的做法。 欢迎访问www.eyeteck.com了解更多!! |
|