首页 > 其他分享 >PICOW避坑-I2C

PICOW避坑-I2C

时间:2022-11-19 12:11:06浏览次数:48  
标签:电阻 高电平 OV7670 避坑 上拉 PICOW I2C

1. I2C扫描出的地址“错误”

看代码中I2C地址是0x78H,结果扫描出来是0x3c —— 没有注意到它们是两倍关系。

I2C.scan()扫描出来的确实是地址,只有7bit,比如0x3c:0111100XB;

写入数据的时候最后一位填0或1,分别表示读写,所以代码上面才会有0x78H。

 

 

2. 摄像头的I2C设备总是扫描不到?

这是我遇到的第一个问题,我以为I2C不通,所以买了OLED096用来测试I2C通路。

 

使用SoftI2C调通OLED096之后,同样的代码再来调试OV7670还是不通;

经过查询得知OV7670需要MCLK提供clock才可以正常I2C通信,于是PWM安排上,不通。

 

买了一个便宜的逻辑分析仪,看到现象:

OLED096在哪个PIN都可以被I2C识别,同样的代码换到OV7670却不可以,SDA和SCL巍然不动。

 

想要使用手动实现以下I2C,实现之前脑子一热:再试一下PICOW的硬件I2C吧,结果竟然读出来OV7670的slave addr?!

焕然大悟:这应该是硬件差别,也就是上拉电阻的区别!

 

 

3. I2C与上拉电阻

I2C通信的时候,master和slave的SDA与SCL连接后,至少有一个设备要通过上拉电阻连接至高电平

PICOW的硬件I2C:把SCL和SDA都上拉至高电平 —— 可以接任何设备;

软件I2C:把SCL上拉高电平,SDA则只是设置为开漏 —— 只能接上拉至高电平的I2C设备;

 

 

OLED的I2C带有上拉电阻,所以使用任意PIN的软件I2C均可以;

OV7670的I2C没有通过上拉电阻接到高电平,与软件I2C连接的时候,高电平其实就是两个开路,当然无法通信了。

 关于开漏输出和推挽输出,这个文档写的很清晰易懂:https://zhuanlan.zhihu.com/p/41942876

 

 

3. 为什么要使用软件I2C?

硬件I2C无法提供I2C.start()和I2C.stop()等操作!软件I2C可调用的接口更多。

 

 

4. I2C正常波形一图秒懂

 

 

 

 

5. 解决方法

a. 使用硬件I2C + 手动实现一些函数

b. 使用软件I2C,添加上拉电阻

c. 全部手动实现I2C

 

标签:电阻,高电平,OV7670,避坑,上拉,PICOW,I2C
From: https://www.cnblogs.com/Younger-Zhang/p/16905828.html

相关文章

  • 问题记录-前端开发避坑(7)--vue 原生h5开发及基础组件开发
    问题1问题描述与分析执行vueRouter的编程式导航时,报错:vuerouterTypeError:onCompleteisnotafunction检查发现是参数格式不对。这里使用了对象语法,而我错把qu......
  • QT 应用程序执行 Linux 指令,以操作 I2c tools 读写举例
    头文件:#include<string.h>#include<QProcess>#include<QDebug>#include<QString>写数据到I2c:voidwriteData(uint8_tdata){QProcessp;//声明......
  • I2C总线简介-转载
    I2C总线简介-立创社区(szlcsc.com)简介NXP半导体(原Philips半导体)于20多年前发明了一种简单的双向二线制串行通信总线,这个总线这个总线被称为IIC、Inter-IC或者I2C......
  • Linux i2ctool 工具的使用方法
    1、工具安装sudoapt-getinstalli2c-tools2、使用2.1 探测总线和设备 参数说明:-y:自动选择yes-r:快速读指令-q:快速写指令-......
  • 开发调试工具:USB转IIC/I2C/SPI/UART适配器模块可编程开发板
    开发调试工具:USB转IIC/I2C/SPI/UART适配器模块可编程开发板 发个方便测试I2C、SPI、1Wire接口的工具模块总的思路是通过USB或者UART接口发送一些协议字符串,由模块转换......
  • i2c驱
    1、qu/**@description:从ap3216c读取多个寄存器数据*@param-dev:ap3216c设备*@param-reg:要读取的寄存器首地址*@param-val:读取到的数据......
  • postgresql数据库数组(Integer)类型避坑
     前提:业务需要把时间戳(秒)数组,存到一个字段,存入后的数据结构:{1659283200,1661961600}entity类配置 @Data@TableName("a")publicclassDispSocBillextendsBaseEnti......
  • I2C学习24C64
    https://blog.csdn.net/hzb15195948039/article/details/86673431?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EESLANDIN......
  • [单片机][IIC/I2C][APDS9960] 手势传感器 4种手势
    /*-----------------------------------------头文件-----------------------------------------*/#include"main.h"/*-----------------------------------------宏定义......
  • [单片机框架][bsp层][cx32l003][bsp_i2c] I2C/IIC硬件配置和使用
    I2C简介I2C是双线双向的串行总线,它为设备之间数据交换提供了一种简单高效的方法。I2C标准是一个具有冲突检测机制和仲裁机制的真正意义上的多主机总线。它能防止两个或者......