首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >I2C在EEPROM和Arduino之间工作,而不是使用STM32

I2C在EEPROM和Arduino之间工作,而不是使用STM32
EN

Stack Overflow用户
提问于 2018-01-04 15:18:06
回答 1查看 1.3K关注 0票数 0

这让我疯狂了几天,所以也许你们可以给我一些关于哪里出了问题的见解。

我试图用24LC16B(STM32,F0)从EEPROM (F0)中读取一些数据,但它不允许我读取数据。我试过一款Arduino,它起作用,而且仍然有效,所以我知道配线是正确的。

这是我的功能,读取EEPROM数据。(为了测试,它被缩减到最基本的基础上):安装功能)

代码语言:javascript
复制
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图书馆的一个巴斯特箱

我使用了逻辑分析器来查看通信进行的情况,现在我真的不明白了。下面是工作Arduino版本的printscreen:

下面是STM32通信的屏幕:

逻辑分析器导出(可用Saleae逻辑查看)

正如您所看到的,我使用的地址是相同的(尽管我必须在STM32中使用0xA2 ),除了NACK之外,没有任何奇怪的事情发生。那么有什么可能是错的呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-04 16:02:51

  1. 确认是否满足所有总线定时要求。
  2. 确认每个写入周期后是否有足够的延迟(5 mS)
  3. 确认母线电容在I2C (400 pF -理论上)的允许范围内.
  4. 确认是否提供了正确的VCC。

正如您所提到的,EEPROM与单片机的接口使用电缆,您需要符合电容。

你可以使用示波器来检查它们在波形中是否有任何失真。你可以用LCR计来检查电容。

尝试将总线速度降低到25 kHz至50 kHz,并检查波形。试着增加拉力电阻的强度。

错误的VCC容量(例如4.2v而不是5v )的问题是,时间可能与之不同。(没有完全验证,但它解决了问题)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48098277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档