这让我疯狂了几天,所以也许你们可以给我一些关于哪里出了问题的见解。
我试图用24LC16B(STM32,F0)从EEPROM (F0)中读取一些数据,但它不允许我读取数据。我试过一款Arduino,它起作用,而且仍然有效,所以我知道配线是正确的。
这是我的功能,读取EEPROM数据。(为了测试,它被缩减到最基本的基础上):安装功能)
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版本的printscreen:

下面是STM32通信的屏幕:

正如您所看到的,我使用的地址是相同的(尽管我必须在STM32中使用0xA2 ),除了NACK之外,没有任何奇怪的事情发生。那么有什么可能是错的呢?
发布于 2018-01-04 16:02:51
正如您所提到的,EEPROM与单片机的接口使用电缆,您需要符合电容。
你可以使用示波器来检查它们在波形中是否有任何失真。你可以用LCR计来检查电容。
尝试将总线速度降低到25 kHz至50 kHz,并检查波形。试着增加拉力电阻的强度。
错误的VCC容量(例如4.2v而不是5v )的问题是,时间可能与之不同。(没有完全验证,但它解决了问题)
https://stackoverflow.com/questions/48098277
复制相似问题