IIC的问题请教

fishly_0 2010-10-13 05:00:58
根据IIC的协议,传输数据时,应该是 起始位+7位slave地址+1位读写标记 + ACK + DATA + ACK + 停止位
这个格式没错吧? 我看三星2440的资料,这个DATA是只能发一个字节,对吗? 今天在网上查了下资料,有些写着发送DATA时一次可以发送多个字节,所以我想问下,一次是只能发1个字节还是可以发送多个字节? 有没有什么限制呢?
...全文
83 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
凤朝凰 2010-10-14
  • 打赏
  • 举报
回复
每次发送一个字节,都需要发送ACK回应。
R/W位为1,说明主设备是要读取数据,从设备开始发送数据,主设备准备接受。
fishly_0 2010-10-14
  • 打赏
  • 举报
回复
明白了,昨天理解错误,我还以为当R/W为1时,第二个字节就是从机发过来的。。。结贴了,谢谢各位。
fishly_0 2010-10-13
  • 打赏
  • 举报
回复
另外8位的读写标记是第一个字节的bit0,16位的读写标记是第一个字节的bit7吗?
fishly_0 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 memoleak 的回复:]
1.起始位+7位slave地址+1位读写标记 + ACK + DATA + ACK + ... + DATA + ACK + 停止位
2.16位地址其实只有10位,其地址是由起始位后的头两个字节组成.第一个字节的头7位是11110XX的组合,其中最后两位XX是10位地址的两个最高位MSB.第一个字节的第8位是R/W位.如果R/W位是0,则第二个字节是10位从机地址剩下的8位;如果R/W位是1,则……
[/Quote]

谢谢大家的回复。
memoleak,你说的第一点,是不是发送地址后,发送每一个byte的DATA都要发送一个ACK呢,这样的意思就是一直站着iic总线对吧。

第二点:你说的如果R/W位是1,则下一个字节是从机发给主机的数据,这是什么意思?如果下一个字节是从机发给主机的数据,那么主机不是才发送了一个字节的地址么?
memoleak 2010-10-13
  • 打赏
  • 举报
回复
1.起始位+7位slave地址+1位读写标记 + ACK + DATA + ACK + ... + DATA + ACK + 停止位
2.16位地址其实只有10位,其地址是由起始位后的头两个字节组成.第一个字节的头7位是11110XX的组合,其中最后两位XX是10位地址的两个最高位MSB.第一个字节的第8位是R/W位.如果R/W位是0,则第二个字节是10位从机地址剩下的8位;如果R/W位是1,则下一个字节是从机发送给主机的数据.
coding码场 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用楼主 fishly_0 的回复:]
根据IIC的协议,传输数据时,应该是 起始位+7位slave地址+1位读写标记 + ACK + DATA + ACK + 停止位
这个格式没错吧? 我看三星2440的资料,这个DATA是只能发一个字节,对吗? 今天在网上查了下资料,有些写着发送DATA时一次可以发送多个字节,所以我想问下,一次是只能发1个字节还是可以发送多个字节? 有没有什么限制呢?
[/Quote]一次可以发送多个字节.
dian_technology 2010-10-13
  • 打赏
  • 举报
回复
一次可以传输多个字节。
限制的话,要视元件类型而定。
比如,一款I2C总线的E2PROM,其一次传输最大字节数等于其一页最大字节数。
fishly_0 2010-10-13
  • 打赏
  • 举报
回复
另外,slave的地址可以是16位的吗? 那该怎么发呢。

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧