打印

I2C硬件外设疑问,求助!!!

[复制链接]
6025|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
问题背景:本人小白一枚,刚学习到I2C通讯,想尝试通过I2C点亮OLED。
原本通过软件可以成功点亮,但硬件却出了问题。
问题描述:
1. 通过对比软件和硬件的输出波形发现:同样是0x78(OLED地址:011110)软件显示为0x3c,硬件为0x78,但硬件没有ACK
2. 如果把硬件改为0x3c就有ACK但还没有发送数据,它会自己发送data:0x20
百思不得其解,这个问题已经折磨了我一个星期了,求求大佬们伸出援助之手
使用板子:HT32F52352
软件:

硬件:

使用特权

评论回复

相关帖子

沙发
查干湖|  楼主 | 2023-4-12 11:36 | 只看该作者

I2C硬件外设疑问,求助!!!

本帖最后由 查干湖 于 2023-4-12 14:27 编辑

使用特权

评论回复
板凳
查干湖|  楼主 | 2023-4-12 11:37 | 只看该作者

I2C硬件外设疑问,求助!!!

使用特权

评论回复
地板
查干湖|  楼主 | 2023-4-12 11:38 | 只看该作者

I2C硬件外设疑问,求助!!!

本帖最后由 tyw 于 2023-4-12 12:59 编辑

不知道为什么不可以加上图片,上面为硬件波形,下面为软件模拟

simKeil_MDK_Holtek_Edition(InstallationGuide)v110.pdf (5.12 MB)
sim_HT32_IAR-QuickStartv110.pdf (4.77 MB)
sim_HT32_ISP-IAP-UserManualv100.pdf (1.85 MB)
sim_HT32_Keil-QuickStartv110.pdf (2.19 MB)
HT32_MCU_Brochure_2022_SC.pdf (8.22 MB)
simHT32F52342_52_Datasheetv150.pdf (1.17 MB)
simHT32F52342_52_UserManualv130 630页.pdf (7.21 MB)
HT32F52342HT32F52352产品规格书-Holtek.pdf (4.1 MB)
HT32F52342_52_Datasheetv150.pdf (1.25 MB)


                       tyw  注

使用特权

评论回复
评论
查干湖 2023-4-12 13:50 回复TA
@tyw :参考过数据手册和它的I2C示例代码了,但还是不太理解,它到底怎么发的为什么会有0x20 
tyw 2023-4-12 13:01 回复TA
去自家窩里下了啃 
5
zlf1208| | 2023-4-12 13:04 | 只看该作者
本帖最后由 zlf1208 于 2023-4-12 13:06 编辑

H78 = 0111 1000,H3C = 0011 1100,软件发送H78,硬件收到H3C,从二进制码可以看出H3C左移一位就是H78,说明软件发送的时序错位了,修改软件的时序即可

使用特权

评论回复
6
查干湖|  楼主 | 2023-4-12 13:42 | 只看该作者
查干湖 发表于 2023-4-12 11:38
不知道为什么不可以加上图片,上面为硬件波形,下面为软件模拟

参考过了,但是硬件发送还是有问题

使用特权

评论回复
7
查干湖|  楼主 | 2023-4-12 13:47 | 只看该作者
zlf1208 发表于 2023-4-12 13:04
H78 = 0111 1000,H3C = 0011 1100,软件发送H78,硬件收到H3C,从二进制码可以看出H3C左移一位就是H78,说 ...

参考过数据手册了,但还是不太理解。我发现它直接跳过开始就发送了0x78导致硬件直接读成1111 0000
很疑惑官方库没有开始函数,而且后面的0x20不知道怎么回事

使用特权

评论回复
评论
zlf1208 2023-4-12 14:02 回复TA
没有起始位,那就自己加呗 
8
查干湖|  楼主 | 2023-4-12 13:53 | 只看该作者
查干湖 发表于 2023-4-12 13:47
参考过数据手册了,但还是不太理解。我发现它直接跳过开始就发送了0x78导致硬件直接读成1111 0000
很疑惑 ...

还有一种猜想就是OLED会屏蔽最高位既:原本0111 1000会被读取1111 0000.因为OLED的地址码为011110

使用特权

评论回复
9
zlf1208| | 2023-4-12 13:55 | 只看该作者
查干湖 发表于 2023-4-12 11:38
不知道为什么不可以加上图片,上面为硬件波形,下面为软件模拟

加图片我都是这样做的:先把文字发出来,然后再点击“编辑”,重新进入,然后用黏贴的方法把图贴上去就行了

使用特权

评论回复
10
zlf1208| | 2023-4-12 13:58 | 只看该作者
查干湖 发表于 2023-4-12 13:47
参考过数据手册了,但还是不太理解。我发现它直接跳过开始就发送了0x78导致硬件直接读成1111 0000
很疑惑 ...

因为你的时序是错误的,所以先要纠正错误,不要去关注后面的0x20,因为前面错了,后面的东西也肯定是错的,把前面改正确了,后面自然就对了

使用特权

评论回复
11
查干湖|  楼主 | 2023-4-12 14:14 | 只看该作者
zlf1208 发表于 2023-4-12 13:55
加图片我都是这样做的:先把文字发出来,然后再点击“编辑”,重新进入,然后用黏贴的方法把图贴上去就行 ...

图片上传成功了,可以帮忙看看吗

使用特权

评论回复
12
zlf1208| | 2023-4-12 14:24 | 只看该作者
本帖最后由 zlf1208 于 2023-4-12 14:30 编辑

图一:数据是0xF0,图二:数据是0x78,0x20,图三:数据0x78,0x00,0xAE。对比三张图,感觉图一的起始位不够宽,少了一个SCL周期

使用特权

评论回复
13
查干湖|  楼主 | 2023-4-12 14:29 | 只看该作者
zlf1208 发表于 2023-4-12 14:24
图一:数据是0xF0,图二:数据是0x78,0x20,图三:数据0x78,0x00,0xAE。对比三张图,感觉图一的起始位 ...

请问该怎么该写呢?

使用特权

评论回复
14
zlf1208| | 2023-4-12 14:34 | 只看该作者
本帖最后由 zlf1208 于 2023-4-12 14:41 编辑
查干湖 发表于 2023-4-12 14:29
请问该怎么该写呢?

应该就是你说的没有起始位,加一个呗。现在是0x78最前面的二进制0当成了起始位。你可以发0xFF试试,我估计都发不出去

使用特权

评论回复
15
查干湖|  楼主 | 2023-4-12 14:45 | 只看该作者
好的感谢

使用特权

评论回复
16
timerc| | 2023-4-12 16:28 | 只看该作者
本帖最后由 timerc 于 2023-4-12 16:33 编辑

OLED地址是0x1E,是7位地址,那发送的地址应该左移一位,最后一位是R/W标志,就是地址是0x3C/0x3D;I2C起始条件满足,数据发送一般不会错,I2C一般都有起始条件和结束条件,具体是SDA和SCK的电平状态决定;还有I2C一般是用的开漏方式;你用的什么方式,IO模拟还是硬件I2C

使用特权

评论回复
17
查干湖|  楼主 | 2023-4-12 18:16 | 只看该作者
timerc 发表于 2023-4-12 16:28
OLED地址是0x1E,是7位地址,那发送的地址应该左移一位,最后一位是R/W标志,就是地址是0x3C/0x3D;I2C起始 ...

我用的是硬件I2C。OLED的地址是6位的011110,图4上有。
但很奇怪我配置成0x78结果就成图1那样
配置成0x3c虽然没有问题,但会多一个0x20(图2)
图3是软件模拟的,配置成的0x78,但检测时0x3c但可以驱动OLED
百思不得其解

使用特权

评论回复
18
William1994| | 2023-4-12 19:48 | 只看该作者
看二楼图片里面都说了7bit地址+1bit 读写,组成8bit地址,0x78或者0x7A都可以当写地址用。

使用特权

评论回复
19
timerc| | 2023-4-13 08:44 | 只看该作者
查干湖 发表于 2023-4-12 18:16
我用的是硬件I2C。OLED的地址是6位的011110,图4上有。
但很奇怪我配置成0x78结果就成图1那样
配置成0x3c ...

那么剩下的一个地址就是SA0决定的,
SA0是0,是0x78/0x79 ;设备地址是0x3C
SA0是1,是0x7A/0x7B;  设备地址是0x3D
这有啥问题;
假设SA0是0,你用的厂家的程序,如果看不到代码,那么你用0x78不行,用0x3C可以,那就是厂家的代码函数自己对R/W标志位进行处理了,你只需要将设备的地址0x3C带进去就行了;
可以看到波形的话,就是地址命令那个在波形里面肯定要是0x78/0x79,因为波形是直接进入从设备的,地址肯定是这个;

使用特权

评论回复
20
查干湖|  楼主 | 2023-4-13 14:54 | 只看该作者
十分感谢大家,问题已经解决了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

15

帖子

0

粉丝