博客
关于我
Linux驱动实现GPIO模拟I2C读写操作
阅读量:641 次
发布时间:2019-03-15

本文共 1009 字,大约阅读时间需要 3 分钟。

I2C协议简介与GPIO模拟实现

一、I2C协议概述

I2C总线协议是一种用于微控制器和各种外设通信的简洁高效协议。其特点为仅需两根信号线(SDA和SCL)即可实现数据传输,支持多主单/slave模式下的精确控制。

1.基础_lines特性SDA和SCL两根总线均需配置拉电阻,常用10kΩ。线与机制(bus domination)决定总线仲裁和同步的实现基础。

2.Master与Slave关系总线仲裁基于SCL控制权:主设备(Master)负责SCL信号的 clock源管理,Slave则通过检测自身控制权( Bus domination)参与总线资源争夺。

3.Address广播机制寻址方式采用地址广播:Master发送Start信号后,连续发送目标地址(7位或8位)。各Slave筛选,唯一留存的即为接收目标。

4.Communication流程通信过程基于Start和Stop信号包裹。数据有效性由SDA状态变化(仅在SCL high时有效)确定。应答机制需各设备配合:发送ACK或非ACK,确保通信失败恢复。

2.总线协议详解2.1 Start Stop控制• Start:SDA从high转为low,触发所有设备接收。• Stop:SDA从low转为high,结束当前传输。

2.2 Data Valid判断数据有效性由SDA状态与SCL高电平同步决定。

2.3 应答机制每个从机接收后需发送ACK(pull SDA低)或非ACK(保持SDAhigh)。ACK供需后发送。

二、GPIO模拟I2C协议实现

基于GPIO引流,模拟I2C协议实现需配置两路输入输出端口。

1.初始设备配置初始化函数完成总线准备:

  • SDA或SCL 总线设置为high状态。

2.协议实现操作需实现Star、Stop、ACK等元素操作。

3.数据Read/Write实现单字节读点:主控发送Start后逐bit读取信号变化。单字节写点:主控发送Start,逐bit设置信号状态。

3.总线仲裁与同步总线仲裁基于线与机制,主控器若检测其输出与期望不符则放弃总线。同步采用SCL作为时钟源,由低电平延长时间决定。

4.实现细节

  • 函数Define与IO配置
  • 操作流程定义
  • 时延控制(基于传输速率)

综上所述,I2C协议以其线与机制和灵活性成为微控制器外设通信的首选方案。GPIO模拟实现虽虽带来计算开销,但为高效实现提供了可行方案。

转载地址:http://qwwmz.baihongyu.com/

你可能感兴趣的文章
简易计算器案例
查看>>
在Vue中使用样式——使用内联样式
查看>>
Find Familiar Service Features in Lightning Experience
查看>>
Explore Optimization
查看>>
连接Oracle数据库经常报错?关于listener.ora和tnsnames.ora文件的配置
查看>>
解决数据库报ORA-02289:序列不存在错误
查看>>
map[]和map.at()取值之间的区别
查看>>
【SQLI-Lab】靶场搭建
查看>>
【Bootstrap5】精细学习记录
查看>>
Struts2-从值栈获取list集合数据(三种方式)
查看>>
参考图像
查看>>
*.json: [“usingComponents“][“van-button“] 未找到
查看>>
设计模式(18)——中介者模式
查看>>
error LNK2019:无法解析的外部符号_imp_CryptAcquireContextA@20
查看>>
推荐几篇近期必看的视觉综述,含GAN、Transformer、人脸超分辨、遥感等
查看>>
【专题3:电子工程师 之 上位机】 之 【46.QT音频接口】
查看>>
一文理解设计模式--命令模式(Command)
查看>>
VTK:可视化之RandomProbe
查看>>
block多队列分析 - 2. block多队列的初始化
查看>>
Java时间
查看>>