![](/img/trans.png)
[英]I2C on Arduino Nano and on STM32 Blue Pill cannot detect all devices
[英]I2C between EEPROM and Arduino working, not with STM32
这让我发疯了几天,所以也许你们可以给我一些有关出问题的见解。
我正在尝试从带有STM32(F0)的EEPROM( 24LC16B
)中读取一些数据,但它不允许我这样做。 我试过了一个Arduino,该Arduino可以正常工作,所以我知道接线正确。
这是我读取EEPROM数据的功能。 (它只是为了测试而缩减 ):( 我的I2C_setup函数的astebin)
uint16_t readEEPROMData(uint16_t deviceAddress, int memAddress){
// Wait while I2C peripheral is not ready
I2C_WaitForFlag(I2C_ISR_BUSY);
// Start I2C write transfer for 2 bytes, do not end transfer (SoftEnd_Mode)
I2C_TransferHandling(I2C1, 0xA2, 2, I2C_SoftEnd_Mode, I2C_Generate_Start_Write);
I2C_WaitForFlag(I2C_ISR_TXIS);
// For testing purpose, be sure to generate a stop command...
I2C_TransferHandling(I2C1, 0xA2, 0, I2C_AutoEnd_Mode, I2C_Generate_Stop);
return I2C_COMM_STATUS;
}
我曾经使用逻辑分析仪来查看通信的进行情况,但现在我真的不明白。 这是工作中的Arduino版本的打印屏幕:
如您所见,我使用的是相同的地址(尽管我必须在STM32上使用0xA2),并且除了NACK
之外,没有发生任何奇怪的事情。 那么什么可能是错的呢?
正如您提到的,使用电缆将EEPROM与MCU连接时,需要遵循电容。
您可以使用示波器检查其波形是否失真。 您可以使用LCR表检查电容。
尝试将总线速度从25kHz降低到50kHz,然后检查波形。 尝试增加抗拉强度。
错误的VCC容量(例如4.2v而不是5v)的问题是时序可能不同。 (尚未完全验证,但已解决了问题)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.