I2C总线驱动在嵌入式系统中的两种实现

 我来答
科创17
2022-10-08 · TA获得超过5867个赞
知道小有建树答主
回答量:2846
采纳率:100%
帮助的人:170万
展开全部

   引 言

  I C总线(Inter IC Bus)是一种通用的串行总线 是用于IC器件之间连接的二线制总线 他通过串行数据线(Serial Data Lines SDL)及串行时钟线(Serial ClockLine SCL)两线在连接到总线上的器件之间传送信息 并根据地址识别每个器件 一个或多个微控制器以及外围器件可以通过I C总线接口非常方便的连接在一起构成系统 这种总线结构的连线和连接引脚少 器件间总线简单 结构紧凑 因此其构成系统的成本较低 并且在总线上增加器件不会影响系统的正常工作 所有的I C器件共用一套总线 因此其系统修改和可扩展性好 即使有不同时钟速度的器件连接到总线上 时间同步机制也能够很方便地确定总线时钟 因此在嵌入式系统中得到了广泛的应用 I C总线原理

   . I C工作原理

  I C总线是由数据线SDA和时钟线SCL构成的串行总线 可发送和接收数据 每个连接到总线的器件都可以通过惟一的地址与主机通讯 主机可以作为主机发送器或主机接收器 他是一个真正的多主机总线 如果两个或更多主机同时初始化 数据传输可以通过冲突检测和仲裁防止数据被破坏 串行的 位双向数据传输位速率在标准模式下可达 kb/s 快速模式下可达 kb/s 高速模式下可达 Mb/s 连接到相同总线的IC数量只受到总线的最大电容 pF限制

  I C总线在传送数据过程 *** 有 种特殊的电平变换情况 他们分别是 起始(start) 停止(stop)和响应(aek)

  当SCL为高电平时 SDA由高电平向低电平跳变 这个表示起始条件 当SCL是高电平时 SDA线由低电平向高电平跳变表示停止条件 起始和停止条件一般由主机产生 总线在起始条件后被认为处于忙的状态 在停止条件的某段时间后总线被认为再次处于空闲状态

  响应信号是指从机在接收到 b数据后 向主机发出特定的低电平脉冲 表示已收到数据 在响应的时钟脉冲期间 从机必须将SDA线拉低使他在这个时钟脉冲的高电平期间保持稳定的低电平 主机收到应答信号后 根据实际情况做出是否继续传递信号的判断 若未收到应答信号 则判断为从机出现故障          操作时序

  I C总线运用主/从双向通讯 主机和从机都可以工作于接收和发送状态 总线必须由主机(通常为微控制器)控制 主机产生串行时钟(SCL)控制总线的传输方向 并产生起始和停止条件 SDA线上的数据状态仅在SCL为低电平的期间才能改变 SCL为高电平的期间 SDA状态的改变被用来表示起始和停止条件 具体时序见图

   嵌入式系统中的I C驱动的两种实现

   系统自带I C寄存器的实现

  下面以arm S C B为例 给出基于寄存器方式的I C驱动实现 S C B内含一个I C总线主控器 可方便地与各种带有I C接口的器件相连 I C总线控制器有 个特殊功能寄存器 一个控制状态寄存器(I CON) 一个预分频寄存器(I CPS)和一个移位缓冲寄存器(I CBUF) 通过配置这些寄存器 可实现正确的I C数据传输时序 下面分别给出读 写实现的实例 读操作     

  

通过对控制状态寄存器(I CC()N)写入OxlO发送启动码初始化串行I C总线 然后总线控制器发送 位的从设备地址并通过移位缓冲寄存器发送读/写控制位 接收器则在主控器的SCL脉冲期间通过将SDA线从高电平下拉到低电平作为应答信号

  写数据的操作 先设置控制状态寄存器的BF位( x ) 然后写入数据到移位缓冲寄存器 移位缓冲寄存器无论是被读还是写 BF位均会自动清零 若要进行连续的读/写操作 必须设置控制状态寄存器的ACK位( x )

  读数据的操作 在设置控制状态寄存器的BF位以后 可以进行读数据的操作 当读/写完最后一个字节时 可对ACK位进行复位通知发送器/接收器读数据操作结束

  在读/写操作完成以后 可通过对I CCON写入 x 生成结束码

   以GPIO端口模拟I C实现

  此方法是直接用arm S C 的GPIO(GeneralPurpose Input/Output)引脚模拟I C总线的时序来实现数据传输 S C B提供了 个可编程的通用I/O端口 用户可将每个端口配置为输入模式 输出模式或特殊功能模式 由片内的特殊功能寄存器IOPMOD和IOPCON控制

  控制I/O口的特殊功能寄存器一共有 个 IOP MOD I PCON和IOPDATA I/O口模式寄存器(IOP MOD)用于配置P ~P 的输入输出状态 I/O口控制寄存器IOPCON用于配置端口P ~P 的特殊功能 当这些端口用作特殊功能(如外部中断请求 外部中断请求应答 外部DMA请求或应答 定时器溢出)时 其工作模式由 PCON寄存器控制 而不再由IOPMOD寄存器 I/O口数据寄存器(IOPDATA)当配置为输入模式时 读取I/O口数据寄存器IOPDATA的每一位对应输入状态 当配置为输出模式时 写每一位对应输出状态 位[ O]对应于 个I/ 引脚P ~P

  下面用GPIO的pin[O][ ]脚进行I C模拟 其中低位为SDA 高位为SCL 首先给出一些便于操作的宏定义     

       

   应用实例

  为arm外挂PCF 实现实时时钟控制 PCF 是PHILIPS公司生产的具有I C接口的低功耗CM()S实时时钟/日历芯片 其最大总线速度为 kb/s 每次读写数据后 其内嵌的字地址寄存器器会自动产生增量 下面用模拟实现PCF 的I C实时时钟芯片的操作 有字节写/读两种状态 程序中从地址的读地址为 A H 写地址为 A H

  首先使能I C总线 然后对I C总线进行开始操作 就绪之后 依次写人器件地址(即 xA ) 写入寄存器地址 再写人所设寄存器值 控制/状态寄存器 为 控制/状态寄存器 为 秒寄存器为 分钟寄存器 小时寄存器为 日寄存器为 星期寄存器为 月/世纪寄存器为 年寄存器为 (即 年 月 日 点 分 秒) 当程序运行一段时间( 分钟)后 依次读取寄存器 得到时间为 年 月 日 点OO分 秒

   总 结

lishixinzhi/Article/program/qrs/201312/30115

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式