1274|0

2015

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

分析C2000中用I2C 通讯协议与GPIO模拟 [复制链接]

 I2C总线由两条双向信号线构成,分别为数据线(SDA)以及时钟线(SCL),分别用电阻进行上拉,以实现高低电平之间的切换,进行设备之间的数据交交换。I2C允许的工作电压范围较为宽泛,典型电压基准为+3.3V或+5V。常见的I2C总线速率分为以下几种模式:标准模式(100Kbit/s)、快速模式(400Kbit/s)以及高速模式(3.4Mbit/s)等。如图为典型的I2C连接示意图:

图1 I2C连接示意图

         如图2为典型的I2C通讯帧格式示意图。一帧完整的数据发送主要包括起始位、地址位、读/写位、ACK/NCK位、数据位等。下面对各部分进行简要的讲解,并介绍如何通过C2000进行实现。

图2 I2C连接示意图

1.1 起始及结束指令

         当某个设备在I2C总线上被配置为主机(Master),该设备可以发送起始及结束信号用来发起或结束一次I2C通信,母线电平示意图如图2所示。

  • 起始信号:在SCL为高电平期间,SDA由高电平转换为低电平。
  • 结束信号:在SCL为高电平期间,SDA由低电平转换为高电平。


图3 I2C通讯起始及结束信号

     在C2000中,可以通过以下代码实现起始信号的发送。其中SCL及SDA分别代表用C2000 GPIO模拟的SDA及SCL总线,具体定义请参考例程部分。

 

  1. void I2C_Start(void)  
  2. {  
  3.     Delay(I2CDelay);  
  4.     SCL_High();   // Set the SCL  
  5.     SDA_High();   // Set the SDA  
  6.     Delay(I2CDelay);  
  7.     SDA_Low();    // Clear the SDA while SCL is high indicates the start signal  
  8.     Delay(I2CDelay);  
  9.     SCL_Low();    // Clear the SCL to get ready to transmit 
  10. }  

 

     可以参考以下代码实现结束信号的发送:

  1. void I2C_Finish(void)  
  2. {  
  3.     SDA_Low();    // Clear the SDA  
  4.     SCL_Low();    // Clear the SCL  
  5.     Delay(I2CDelay);  
  6.     SCL_High();   // Set the SCL  
  7.     Delay(I2CDelay);  
  8.     SDA_High();   // Set the SDA while SCL is high indicates the finish signal  
  9. }  
 
点赞 关注

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表