当前位置: 首页 > news >正文

arm之s3c2440的I2C的用法

基础概念 

IC(Inter-Integrated Circuit)又称I2C,是是IICBus简称,所以中文应该叫集成电路总线。

        IIC的总线的使用场景,所有挂载在IIC总线上的设备都有两根信号线,一根是数据线SDA,另一 根是时钟线SCL。这两个信号线都是双向的。 作为一种通信方式,IIC总线在某一时刻,总线只允许有一个设备处于发送状态,所发生的数据被总线上所 有的设备所接收。IIC通信协议包含有设备地址,只有发送方携带的地址与某个接收方的地址相同时,接收 方才真正执行相关的指令。

        IIC总线规定,设备在空闲时,两根总线都处于高电平状态。为保证这种状态,数据线SDA和时钟线SCL都要 外接上拉电阻 。

I2C通信的流程 

  1.  IIC总线上连接的若干设备中,每次通信前,发送方首先发送一个“起始”信号,其实信号就是在SCL为高电平时, SDA发送一个低电平。当其它设备接收到这个其实信号后,将进行一次“总线仲裁”。意思就是设备(除发送其实信 号的那个设备以外的)都将处于聆听状态。

  2.IC总线进行数据传送时,时钟线(SCL)上的信号为高电平期间,数据线(SDA)上的数据必须保持稳定。只有在时钟线 (SCL)上的信号为低电平期间,数据线(SCL)上的高电平或低电平状态才允许变化。同时,SCL信号由数据启动发送 的设备提供。输出到数据线(SDA)上的每个字节必须是8位。数据传送时,先传送最高位(MSB),后传送最低位(LSB)。

 3.发送器每发送一个字节(8个bit),就在时钟脉冲 9 期间释放数据线,由接收器反馈一个应答信号。 主机 SCL拉高,读取从机SDA的电平。对于反馈有效应答位ACK的要求是:接收器在第9个时钟脉冲之前的低电平 期间将数据线SDA拉低,并且确保在该时钟的高电平期间为稳定的低电平。

 数据线(SDA)为低电平时,规定为有效应答位(ACK,简称应答位),表示接收器已经成功地接收了该字节。

 数据线(SDA)为高电平时,规定为非应答位(NACK),表示接收器没有成功接收该字节。 

当发送方发送完最后一个bit后,需要发送一个结束标志来终止整个通信过程。当时钟线SCL 为高电平时,数 据线SDA 由低电平向高电平跳变。

完整的IIC通信时序图。 

IIC控制寄存器 

IICCON:IIC控制寄存器中的每个域都需要设置

Bit7:处于发送数据时,如果设置为允许,那么当接收设备回应ACK后,会产生IIC中断。当处于接收数据时, 允许这一位会发送ACK,否则发送NACK。

Bit6:IIC产生波特率的第一次分频

Bit5:由于我们要使用中断方式,所以这一位允许

Bit4:这一位看起来似乎是一个查询用的挂起标志,但是这一位是允许写0的。而且无论我们要发送什么数 据,都必须清除这一位才能真正将数据发送出去。

Bit0~3:IIC产生波特率的第二次分频 

代码示例 

IIC初始化函数

 第16~17行:配置GPE14和GPE15为IIC方式

 第19行:允许ACK,中断使能,IIC时钟分频为512=50M/512=97656.25

 第20行:发送时钟分频因子 0+1=10 因此,波特率为97656.25约等于97.6K

 第22~23行:允许IIC中断,注册中断服务函数

        IIC中断服务函数,由于IIC控制器会在收到和发送完ACK之后产生中断,我们将来在数据发送后等待这个标 记即可。 

        由于无论发送还是接收数据,手册里要求我们必须清除IICCON的第四位之后才能继续,也就是说我们把数据放入IICDS之后,数据并没有发送出去,而是需要我们把这一位清零后数据才开始发送。从发送第一个比特到接收到ACK之间肯定需要时间,当收到ACK之后就会产生中断。需要注意的 是at24c02在收到数据之后需要一点时间把数据写入到EEPROM中,所以可以在循环中等待一段时间。这个 时间大约为100us。 

写操作

读操作 

结合以下流程图更容易理解

 主机发送器操作

主机接收器操作 

以下是逻辑分析仪采取的波形图,直观地查看数据 

相关文章:

  • Pycharm社区版创建Flask项目详解
  • ArcGIS Pro属性表添加字段是灰色的,点不了?+属性表导出为excel表格
  • 2025年使用Scrapy和Playwright解决网页抓取挑战的方案
  • 天津大学第二讲:《深度解读DeepSeek:部署、使用、安全》|附PPT下载方法
  • 1、pytest基本用法
  • 【多学科稳定EI会议大合集】计算机应用、通信信号、电气能源工程、社科经管教育、光学光电、遥感测绘、生物医学等多学科征稿!
  • 文档处理控件Aspose.Words 教程:.NET版中增强的 AI 文档摘要功能
  • C#中 String类API(函数)
  • DeepSeek大模型 + 自建知识库:用AI打造“专属问答机器人”
  • 婚姻的解构与重构 | 一场关于选择与责任的探索
  • Java中java.time.Instant类的详细使用示例、注释及关键特性说明,以及和LocalDateTime对比
  • 【监控系列】prometheus
  • 数据库基础知识点(系列一)
  • leetcode1109. 航班预订统计-medium
  • 数据库——关系代数之基本操作
  • 基于QT(C++)实现用户界面系统
  • PyeCharts基础语法
  • 绘制社交元宇宙:陶明解析Soul如何以AI技术重塑虚拟社交体验
  • 构建一个解释器的完整过程:以C语言为核心的技术探索
  • 【R语言】使用ALDEx2对微生物组进行差异分析
  • 五一假期上海铁路预计发送446万人次,同比增长8.4%
  • 安阳一村支书微信群骂村民被警方行拘,辩称对方先“污蔑造谣”
  • 江西省国资委原副主任李键主动向组织交代问题,接受审查调查
  • 当隐身13年的北小京决定公开身份 ,专业戏剧评论依然稀缺
  • 伊朗国防部发言人:发生爆炸的港口无进出口军用物资
  • 公交公司须关注新出行需求:“单车巴士”能否常态化