一、Bit Bang
关于 Bit Bang 的解释:Use software to control serial communication at general-purpose I/O pins,简单来讲就是使用软件通过 IO 脚去实现 I2C 的时序从而使用 I2C 协议进行通信。
这样做的好处是可以突破硬件上的限制,例如芯片不具有硬件 I2C 模块,或者硬件 I2C 模块损坏,又或者使用硬件 I2C 模块时布线非常麻烦。坏处是需要写代码模拟时序,根据不同的硬件平台和不同的时钟频率,代码中的部分参数是不一样的。
二、代码分析
以下代码基于 STM32 系列 MCU
使用软件模拟 I2C 的步骤如下:
1、设置 GPIO 管脚
设置两个管脚作为 SCL 和 SDA,例如 GPIOA1 和 GPIOA2
2、SCL时钟周期
3、附加设置
这里主要是使用宏定义模拟函数
4、I2C 启动
5、I2C停止
6、发送 8 位数据,返回值为从响应 ACK 标志
7、接收 8 位数据
三、操作实例
以下代码为通过调用上面的基本代码来实现 I2C 通信
1、设置 DAC 寄存器的值
三个参数分比为从机地址,寄存器地址,8 位数据
2、读取 DAC 寄存器的值
两个参数分别为从机地址,寄存器地址,返回数据为 16 位。这是由于某些器件的硬件设计,采用 7 位表示寄存器地址,而每个寄存器包含 9 位数据。更常见的方式为 8 位寄存器地址,一个寄存器 8 位数据,这种方式的代码仅返回 8 位数据,见代码 2。
代码 1,返回 16 位数据,不常见
代码 2,返回 8 位数据
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
原文标题:学会这个技术,再也不怕芯片不具有硬件I2C模块了!
文章出处:【微信号:weixin21ic,微信公众号:21ic电子网】欢迎添加关注!文章转载请注明出处。
相关推荐
I2C总线简单方便,是我们经常使用的一种总线。但有时候我们的MCU没有足够多的I2C控制器来实现我们的应用,所幸我可以使用普通的GPIO引脚来模拟低速的
发表于 12-14 14:19
•5324次阅读
上篇推文对I2C总线的特性进行了介绍和描述。对于开发者而言,最重要的是编码I2C的读写时序驱动。本篇推文主要总结和分享I2C总线主机端通信的编程实现
发表于 10-01 16:54
•1618次阅读
模拟I2C时序进而实现I2C通讯的。给很多想学习硬件I2C通讯的小伙伴带来了困难。下面先介绍一下
发表于 01-24 08:22
I2C总线应用中的几个问题:i2c上拉电阻阻值的确定,PCB布局布线与抗干扰设计,软件模拟I2C时序
发表于 09-13 14:27
•51次下载
软件模拟I2C总线的C51实现
发表于 10-13 11:03
•8次下载
I2C总线的结构、工作时序和模拟编程
发表于 10-24 14:34
•13次下载
本文档的主要内容详细介绍的是使用51单片机IO模拟I2C的程序免费下载。
发表于 08-02 17:34
•5次下载
TMS320F28377D为例,使用ti公司dsp开发工具ccs10.1配置i2c模块。写这篇文章的缘由,因为市面上很多DSP其实内部是具有硬件I2C接口的,但由于网络上大部分资料和例程都是利用IO口
发表于 11-29 14:06
•16次下载
STM32 模拟I2C实现#通用GPIO模拟I2C通信实现样例1 GPIO初始化``#ifdef
发表于 11-29 15:21
•28次下载
文章目录I2c协议和时序I2c介绍I2c硬件连接I2c总线的信号I2c总线写
发表于 12-06 14:06
•17次下载
硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C管脚也是专用的,因而效率要远高于
发表于 12-28 19:14
•81次下载
使用STM32的GPIO模拟I2C总线时序,GPIO设置为开漏模式,SDA和SCK外部必须使用上拉电阻,一般是4.7K。开漏模式的好处是,可以同时读取输入电平,而无需切换输入/输出模式。注意事项:在
发表于 12-28 19:36
•13次下载
电子发烧友网站提供《ESP 12E I2c基卡的I2C IO卡设计.zip》资料免费下载
发表于 08-15 09:27
•3次下载
STC单片机IO口模拟I2C(主从)文件资料免费下载。
发表于 08-29 10:13
•13次下载
具有随机性,所以实现方法不能参照软件模拟I2C主机那样使用单纯的软件查询状态的方法。由于实际使用时,MCU的固件还会执行其他的操作,所以如果
发表于 01-17 14:56
•1.1w次阅读
评论