8H/8G 的I2C还需要外部上拉电阻吗?
手册里说每个IO口都可以使能4K的上拉电阻,讲到I2C的地方也没有强调外部上拉。那么8G/8H的I2C还需要外部上拉电阻吗?
实际测试。直接使用IO口的准双向模式也能用,因为内部带了一个比较大的上拉电阻了。
不过对于屏幕类不需要读的应用,可以直接设置强推挽模式,抗干扰更强。如果是准双向发现通讯不稳定,可以使能内部独立的上拉电阻。
I2C, 外部如没加 10K/5K/4K/3K 上拉电阻,
就打开内部上拉电阻
一些旧的型号部分IO口(例如STC89C52的P0)没有上拉,后来的型号都有了,但必须进行配置。 实际测试开启内部上拉电阻就能很稳定 #defineHARDIIC_IICX 0x30 //将IIC设置为P3_3,P3_2
#defineHARDIIC_SCL_OUT {P3M0 &= ~0x04; P3M1 &= ~0x04;}//P3_2准双向IO
#defineHARDIIC_SDA_OUT {P3M0 &= ~0x08; P3M1 &= ~0x08;}//P3_3准双向IO
void hardiic_init()
{
HARDIIC_SCL_OUT; //开漏输出
HARDIIC_SDA_OUT; //开漏输出
P3PU |= 0x0c; //使能P3_2和P3_3的上拉电阻
P_SW2 |= HARDIIC_IICX; //外设端口切换控制寄存器
I2CCFG = 0xe0; //使能IIC主机模式
I2CMSST = 0x00; //IIC主机状态寄存器清零
}
请各位帮忙看看上面的代码。实际测试SCL和SDA的电压是0.5V左右。通信也不成功。
Allspace 发表于 2024-2-13 11:44
请各位帮忙看看上面的代码。实际测试SCL和SDA的电压是0.5V左右。通信也不成功。
...
仿真看一下有没有进i2c中断
i2c中断里有没有清除i2cmsst状态寄存器 如果用准双向,注意准双向的0变1有两个机器周期的推挽,会不会有不良影响?或者可以加速翻转?
主机从机电压相同,开漏+内部4K上拉。
主机5V从机3.3V,开漏+外部3.3V上拉。
主机3.3V从机5V,主机改5V供电,STC单片机电源电压范围宽。(谁知道从机能否兼容3.3V,不确定的)
如果从机数量多或通信速度快,示波器看上升沿慢的话,内部4K上拉不够用请加外部上拉,3.3K~1K,具体看波形。
lzl1okOK 发表于 2024-1-28 19:15
实际测试开启内部上拉电阻就能很稳定
我的测试结果也是这样的,能提升最大传输速率。