硬件平台:自己手画的基于STM32F103C8T6的FDC2214驱动板
通信方式:模拟I2C
问题:FDC2214无应答,SDA控制权交由FDC2214后,始终无法拉低(上拉电阻从1.5k、2.2k、4.7k都测试过)
固件部分代码:
#define SDA_IN() {GPIOB->CRH &= 0xFFFF0FFF; GPIOB->CRH |= 0x00008000;} //PB11输入模式
#define SDA_OUT() {GPIOB->CRH &= 0xFFFF0FFF; GPIOB->CRH |= 0x00003000;} //PB11输出模式
#define IIC_SCL GPIO_PIN_10 //SCL
#define IIC_SDA GPIO_PIN_11 //SDA
#define READ_SDA HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_11) //输入SDA
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_GPIOB_CLK_ENABLE(); //使能GPIOB时钟
GPIO_Initure.Pin = IIC_SCL | IIC_SDA;
GPIO_Initure.Mode = GPIO_MODE_OUTPUT_OD; //推挽输出(GPIO_MODE_OUTPUT_PP也测试过)
GPIO_Initure.Speed = GPIO_SPEED_FREQ_HIGH; //快速
HAL_GPIO_Init(GPIOB, &GPIO_Initure);
HAL_GPIO_WritePin(GPIOB, IIC_SCL, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, IIC_SDA, GPIO_PIN_SET);
部分测试过程,核心依然是STM32,但FDC使用TI开发板的FDC板(与MSP430掰开后与STM32连接),测试都有应答信号,且读出器件ID以及写入的值都正常,但换做自行设计FDC就有问题,而自行设计的FDC原理与开发板一致,初步怀疑是焊接导致(都是自己手动焊接),但补焊后问题依然
请问又遇到过类似情况的么?
user3739767:
地址是0x54(ADDR接地)
Andonis Wang:
回复 user3739767:
Hi,
如果I2C地址确认无误的话,建议使用示波器查看一下I2C的通信波形,确认信号波形是否正常。
如果I2C信号真长,可能需要检查以下FDC的供电是否正常。
谢谢。
Kailyn Chen:
地址没有问题,I2C 频率多少?
另外,在写完data之后加一个小的延Tpd时,再去读读看呢?