博客
关于我
Linux驱动实现GPIO模拟I2C读写操作
阅读量:642 次
发布时间: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/

你可能感兴趣的文章
Django静态文件的加载以及STATIC_URL、 STATIC_ROOT 、STATICFILES_DIRS的区别
查看>>
Spring 和 DI 依赖注入
查看>>
中序线索二叉树的遍历
查看>>
文字策略游戏 android studio(学习intent,textview,等等)
查看>>
laravel server error 服务器内部错误
查看>>
17_注册Github账号
查看>>
Linux驱动实现GPIO模拟I2C读写操作
查看>>
iJ配置Maven环境详解
查看>>
仿QQ登陆界面
查看>>
HttpServletResponse-完成文件下载
查看>>
什么题目的暂时还没想好
查看>>
Python中pip安装模块太慢
查看>>
docker安装
查看>>
N皇后问题解法(递归+回朔)
查看>>
面试题 08.01. 三步问题
查看>>
剑指 Offer 11. 旋转数组的最小数字
查看>>
剑指 Offer 57. 和为s的两个数字
查看>>
git 在本地删除、添加远端的源
查看>>
字符串的反转
查看>>
word文档注入(追踪word文档)未完
查看>>