本帖最后由 hu9jj 于 2021-1-23 15:19 编辑
模拟I2C测试通过后,我又对硬件I2C进行了测试。首先进入MCC进行配置,添加MSSP1:
然后选择I2C(注意在MSSP1中是SPI和I2C二选一):
为了配合扩展板,SDA选择RB4引脚、SCL选择RB6引脚:
生成代码之后,会包含一个范例,范例提供了几个现成的函数可供调用:
开始测试时调用这些函数编译时提示参数错误,弄了很久才明白I2C器件的地址应该是7位的,函数内会自动左移1位并加上读写操作位,例如对AT24C02进行操作时,I2C器件的地址不是0xA0(1010 0000),应该0x50(0101 0000),对应十进制是80,下面是测试的代码:
void AT24C02_Test(void)
{
// 硬件I2C对AT24C02读写操作测试
uint8_t val1,val2;
val1 = I2C1_Read1ByteRegister( 80, 10); //地址要用7位
val2 = I2C1_Read1ByteRegister( 80, 11);
LCD_write_value(0, 6, 3, 0, 1, val1);
LCD_write_value(30, 6, 3, 0, 1, val2);
I2C1_Write1ByteRegister( 80, 10, minute);
I2C1_Write1ByteRegister( 80, 11, second);
//I2C测试结束
}
下面是测试过程的照片:
从测试结果看,I2C并未读取到正确的数据,反复查找也未找到原因,为此还更换过IC也没有解决问题,通过逻辑分析仪抓取到的时序图,发出的波形是正确的,就是没有得到I2C器件的回应,祥见下图:
|