GPIO模拟I2C

阅读: 评论:0

GPIO模拟I2C
之前在学习I2C驱动,想了想应该先深刻理解下I2C协议。个⼈觉得理解I2C协议最好的⽅法就是实践,⽽最好的实践⽅式就是⽤GPIO来模拟I2C协议进⾏试验,直观深刻。
先看下I2C时序图:
根据时序图,⽤两个gpio分别模拟sda和scl即可。在这之前⾃然需要先对gpio进⾏输⼊输出的配置。这⾥只从写数据⾓度来描述这⼀过程。读数据同理即知。
先配置gpio,包括sda、scl、供电gpio等额外功能gpio。
降温剂gpio_config(GPIO_SDA, GPIO_OUTPUT);
gpio_config(GPIO_SCL, GPIO_OUTPUT);
gpio_config(GPIO_VDD, GPIO_OUTPUT);
多媒体教学平台udelay(3);
gpio_set(GPIO_OLED_VDD, 1);
铁路道口报警器
//开始传输
gpio_set(GPIO_SDA,1);
gpio_set(GPIO_SCL,1);
udelay(1);
gpio_set(GPIO_SDA,0);
udelay(1);
逐个字符(8位)传输数据:
for (i=0; i<8; i++)
微波合成萃取仪
{
gpio_set(GPIO_SCL, 0);
黑刚玉磨料
if (c & (1<<(7-i)))
gpio_set(GPIO_SDA, 1);
gpio_set(GPIO_SDA, 1);
else
无心磨床自动上料机gpio_set(GPIO_SDA, 0);
udelay(1);
gpio_set(GPIO_SCL, 1);
udelay(1);
}
结束传输:
gpio_set(GPIO_SCL, 0);
gpio_set(GPIO_SDA, 1);
udelay(1);
gpio_set(GPIO_SCL, 1);
I2C传输会收到ACK,可根据ACK值判断发送数据的成功与失败,实际中,没写⼊⼀个字符数据都要通过ack来判断成功与否。读取ack值,同样⽤gpio来模拟:
接受数据⾸先配置sda为输⼊,scl先⾼后低,在读取sda值即可。
gpio_config(GPIO_SDA, GPIO_INPUT);
gpio_set(GPIO_SCL, 1);
udelay(2);
gpio_set(GPIO_SCL, 0);
⼤概流程就是这么简单,理解了i2c协议,再去理解i2c驱动,当然也最好是实例学习⼀下。
开始传输:

本文发布于:2023-05-14 09:02:03,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/4/99191.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:Ackley函数
下一篇:ASICII码
标签:协议   传输   数据   配置   理解   过程   判断   失败
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图