问答

汇集网友智慧,解决技术难题

21ic问答首页 - I2C硬件外设疑问,求助!!!

单片机 MUC 国产芯片

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

查干湖2023-04-12
问题背景:本人小白一枚,刚学习到I2C通讯,想尝试通过I2C点亮OLED。
原本通过软件可以成功点亮,但硬件却出了问题。
问题描述:
1. 通过对比软件和硬件的输出波形发现:同样是0x78(OLED地址:011110)软件显示为0x3c,硬件为0x78,但硬件没有ACK
2. 如果把硬件改为0x3c就有ACK但还没有发送数据,它会自己发送data:0x20
百思不得其解,这个问题已经折磨了我一个星期了,求求大佬们伸出援助之手
使用板子:HT32F52352
软件:

硬件:

回答 +关注 5
5355人浏览 20人回答问题 分享 举报
20 个回答
  • 怎么解决的
  • 十分感谢大家,问题已经解决了
  • 查干湖 发表于 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,因为波形是直接进入从设备的,地址肯定是这个;
  • 看二楼图片里面都说了7bit地址+1bit 读写,组成8bit地址,0x78或者0x7A都可以当写地址用。
  • 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
    百思不得其解
  • 本帖最后由 timerc 于 2023-4-12 16:33 编辑

    OLED地址是0x1E,是7位地址,那发送的地址应该左移一位,最后一位是R/W标志,就是地址是0x3C/0x3D;I2C起始条件满足,数据发送一般不会错,I2C一般都有起始条件和结束条件,具体是SDA和SCK的电平状态决定;还有I2C一般是用的开漏方式;你用的什么方式,IO模拟还是硬件I2C
  • 好的感谢
  • 本帖最后由 zlf1208 于 2023-4-12 14:41 编辑
    查干湖 发表于 2023-4-12 14:29
    请问该怎么该写呢?

    应该就是你说的没有起始位,加一个呗。现在是0x78最前面的二进制0当成了起始位。你可以发0xFF试试,我估计都发不出去
  • zlf1208 发表于 2023-4-12 14:24
    图一:数据是0xF0,图二:数据是0x78,0x20,图三:数据0x78,0x00,0xAE。对比三张图,感觉图一的起始位 ...

    请问该怎么该写呢?
123下一页

您需要登录后才可以回复 登录 | 注册