找回密码
 立即注册
搜索
热搜: 中医 针灸 咳嗽
查看: 153|回复: 0

I2C总线传输协议

[复制链接]

3711

主题

1

回帖

1万

积分

管理员

积分
11937
发表于 2023-2-16 09:06:58 | 显示全部楼层 |阅读模式
  • 数据位的有效性规定

SCL为高电平期间,数据线上的数据必须保持稳定,只有SCL信号为低电平期间SDA状态才允许变化






  • I2C的起始和终止信号

SCL线为高电平期间SDA线由高电平向低电平的变化表示起始信号SCL线为高电平期间SDA线由低电平向高电平的变化表示终止信号




  • I2C字节的传送与应答

    每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。






  • 应答位的作用

  • 主机在发送数据时,每次发送一字节数据,都需要读取从机应答位,当从机空闲可以接收该字节数据时,从机会发出应答(一帧数据的第9位为“0”),当从机正忙于其他工作的处理来不及接收主机发送的数据时,从机会发出非应答(一帧数据的第9位为“1”)主机则应发出终止信号以结束数据的继续传送,主机通过从机发出的应答位来判断从机是否成功接收数据。
  •     当主机接收数据时,它收到最后一个数据字节后,必须向从机发出一个结束传送的信号。这个信号是由对从机的“非应答”来实现的。然后,从机释放SDA线,以允许主机产生终止信号。

  • I2C写数据流程




在起始信号后必须传送一个从机的地址(7位)我们开发板上的AT24C02地址为0xa0,第8位是数据的传送方向位(R/T),用“0”表示主机发送数据(T),“1”表示主机接收数据(R)。


硬件地址:

  • I2C读数据流程




在读数据时也要先发送器件地址,读写方向为写,因为我们下一帧需要发送从AT24C02内那个单元开始读,之后需在发一次器件地址这个时候读写方向就为读了,接着我们就可以从总线上读取数据。


  • 软件模拟I2C通信时序

I2C总线的数据传送有严格的时序要求。I2C总线的起始信号、终止信号、发送“0”及发送“1”的模拟时序 :





I2C起始信号程序

  1. void I2C_Start()
  2. {
  3.         SCL = 1;
  4.         _nop_(); //1.08506us
  5.         SDA = 1;
  6.         delay_5us();
  7.         SDA = 0;
  8.         delay_5us();
  9. }
复制代码



I2C主机检测从机应答

  1. bit Test_ACK()
  2. {
  3.         SCL =  1;        //在时钟总线为高电平期间可以读取应答信号
  4.         delay_5us();
  5.         if (SDA)
  6.         {
  7.                 SCL = 0;
  8.                 I2C_Stop();
  9.                 return(0);
  10.         }
  11.         else
  12.         {
  13.                 SCL = 0;
  14.                 return(1);
  15.         }
  16. }
复制代码


I2C主机发送应答


  1. void Master_ACK(bit i)
  2. {
  3.         SCL = 0;
  4.         _nop_();
  5.         if (i)
  6.         {
  7.                 SDA = 0;
  8.         }
  9.         else
  10.         {
  11.                 SDA = 1;
  12.         }
  13.         _nop_();
  14.         SCL = 1;//数据保持稳定
  15.         _nop_();
  16.         SCL = 0;
  17.         _nop_();
  18.         SDA = 1;
  19.         _nop_();
  20. }
复制代码






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

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

本版积分规则

Archiver|手机版|小黑屋|私人站点 ( 冀ICP备2023028127号-2 )

GMT+8, 2025-7-6 07:35 , Processed in 0.091368 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表