21ic问答首页 - I2C硬件外设疑问,求助!!!
I2C硬件外设疑问,求助!!!
查干湖2023-04-12
问题背景:本人小白一枚,刚学习到I2C通讯,想尝试通过I2C点亮OLED。
原本通过软件可以成功点亮,但硬件却出了问题。
问题描述:
1. 通过对比软件和硬件的输出波形发现:同样是0x78(OLED地址:011110)软件显示为0x3c,硬件为0x78,但硬件没有ACK
2. 如果把硬件改为0x3c就有ACK但还没有发送数据,它会自己发送data:0x20
百思不得其解,这个问题已经折磨了我一个星期了,求求大佬们伸出援助之手
使用板子:HT32F52352
软件:
硬件:
原本通过软件可以成功点亮,但硬件却出了问题。
问题描述:
1. 通过对比软件和硬件的输出波形发现:同样是0x78(OLED地址:011110)软件显示为0x3c,硬件为0x78,但硬件没有ACK
2. 如果把硬件改为0x3c就有ACK但还没有发送数据,它会自己发送data:0x20
百思不得其解,这个问题已经折磨了我一个星期了,求求大佬们伸出援助之手
使用板子:HT32F52352
软件:
硬件:
赞0
评论
2023-05-09
赞0
评论
2023-04-13
赞0
那么剩下的一个地址就是SA0决定的,
SA0是0,是0x78/0x79 ;设备地址是0x3C
SA0是1,是0x7A/0x7B; 设备地址是0x3D
这有啥问题;
假设SA0是0,你用的厂家的程序,如果看不到代码,那么你用0x78不行,用0x3C可以,那就是厂家的代码函数自己对R/W标志位进行处理了,你只需要将设备的地址0x3C带进去就行了;
可以看到波形的话,就是地址命令那个在波形里面肯定要是0x78/0x79,因为波形是直接进入从设备的,地址肯定是这个;
评论
2023-04-13
赞0
评论
2023-04-12
赞0
我用的是硬件I2C。OLED的地址是6位的011110,图4上有。
但很奇怪我配置成0x78结果就成图1那样
配置成0x3c虽然没有问题,但会多一个0x20(图2)
图3是软件模拟的,配置成的0x78,但检测时0x3c但可以驱动OLED
百思不得其解
评论
2023-04-12
赞0
OLED地址是0x1E,是7位地址,那发送的地址应该左移一位,最后一位是R/W标志,就是地址是0x3C/0x3D;I2C起始条件满足,数据发送一般不会错,I2C一般都有起始条件和结束条件,具体是SDA和SCK的电平状态决定;还有I2C一般是用的开漏方式;你用的什么方式,IO模拟还是硬件I2C
评论
2023-04-12
赞0
评论
2023-04-12
赞0
应该就是你说的没有起始位,加一个呗。现在是0x78最前面的二进制0当成了起始位。你可以发0xFF试试,我估计都发不出去
评论
2023-04-12
赞0
请问该怎么该写呢?
评论
2023-04-12
您需要登录后才可以回复 登录 | 注册