sunjiye
驱动牛犊
驱动牛犊
  • 注册日期2003-10-07
  • 最后登录2005-09-20
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1423回复:7

请教:利用SAA7146的I2C总线可以一次性发送或读取多个字节吗,比如10个字节?

楼主#
更多 发布于:2003-10-07 15:01
SAA7146(master)通过I2C总线向其它芯片(slave)写数据时,首先给出Slave的地址、Slave内积存器的地址,然后才是一个数据。这样,一次操作只能完成一个数据。

请各位大侠指教!小弟不胜感激!

最新喜欢:

badluckybadluc...
link_bridge
驱动巨牛
驱动巨牛
  • 注册日期2002-11-28
  • 最后登录2011-05-15
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望13点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-10-07 15:50
应该不行吧!
比如你对从片的某个寄存器操作,一次只能传送一个数据。
你一次传送10个数据的话,slave又不知道后面的数据是给哪个
寄存器的。无法识别的呀!

[编辑 -  10/7/03 by  link_bridge]
sunjiye
驱动牛犊
驱动牛犊
  • 注册日期2003-10-07
  • 最后登录2005-09-20
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-10-07 16:16
 其实我是想实现SAA7146通过I2C总线与一个芯片的通讯,这个芯片的对I2C总线的时序要求如图。

我的直观感觉是可以实现的,理由有如下三条:
1、I2C总线协议中没有规定一次只能传送一个有效数据;
2、I2C总线协议是PHILIPS提出的,而SAA7146是PHILIPS的芯片,且芯片资料上也没有明确指出只能这样操作。
3、如果在第一次的3个字节(包括两个地址字节)传送完毕,且第三个字节的属性为“continue”的话,在得到最后一个ACK后,发送第二次的数据(比如三个字节全为数据),slave应该可以收到。

以上为个人主观猜测,无实际经验,请各位大侠指条明路。
sunjiye
驱动牛犊
驱动牛犊
  • 注册日期2003-10-07
  • 最后登录2005-09-20
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-10-07 16:19
jst7792
论坛版主
论坛版主
  • 注册日期2001-12-10
  • 最后登录2006-11-16
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-10-08 09:52
可以一次多个数据。
兄弟们,给点分吧
babyblue
驱动中牛
驱动中牛
  • 注册日期2003-05-06
  • 最后登录2005-12-21
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-10-09 12:25
如果在第一次的3个字节(包括两个地址字节)传送完毕,且第三个字节的属性为“continue”的话,在得到最后一个ACK后,发送第二次的数据(比如三个字节全为数据),slave应该可以收到。

完全正确!
sunfammer
驱动牛犊
驱动牛犊
  • 注册日期2002-11-24
  • 最后登录2004-12-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-10-09 21:47
可以传n个连续的,只不过得3个一组,第一个应该是地址,第二各及以后的填连续模式,最后一个填终止模式,仔细看看数据手册。
每3个一组,得每传一组后不断检查完成和出错状态,以确认是否可以传下以组,我用7146和lpc932单片机传过,我最多一次连续传了33个byte
kermit
驱动小牛
驱动小牛
  • 注册日期2002-11-29
  • 最后登录2010-03-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
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了解更多!!
游客

返回顶部