This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好、TI 团队、
我正在使用 I2C 驱动程序、我设法使 i2c fifo 工作、fifo Tx、fifo Rx 中断工作。 我正在正确获取中断。
我的问题是、当我尝试读取 EEPROM 时、我将访问一些随机地址值、而不是我想要的正确存储器位置
目前,我正在执行以下读取操作步骤(步骤1中禁用了*模块)
我的写入函数正在工作、因为我可以看到我加载的值、我只能在我执行多次读取(因此我知道数据写入 EEPROM)时看到这些值(这是新的 EEPROM、因此所有数据位必须为1)
我怀疑 写操作可能也无法访问我正在传递或希望写入的正确地址。
那么,请告诉我如何访问正确的位置,我缺少什么?
我要做的是从特定位置进行写入和读取。
我的代码非常通用、因为它适用于传感器、EEPROM 和其他支持 i2c 的器件。
P.S. 重复模式启用
如果您想查看代码、我可以在个人消息中共享、而不是在公共消息中共享。
Ashish、
EEPROM 中指定的写入周期时间是多少? 通常、在 I2C 传输要编程到特定地址的数据后、将数据编程到 EEPROM 地址需要有限的时间(由 EEPROM 状态机定义)。 这通常被指定为写入周期时间。 如果您不等待写入周期时间、您将读取不正确的数据。
I2C 写入函数发送开始条件+ EEPROM 地址、写入位设置+数据+停止条件
等待 EEPROM 数据表中指定的写入周期时间
I2C 读取功能发送开始条件+读取位设置的 EEPROM 地址+从器件数据+停止条件
此致、
曼诺伊
我在个人邮件中分享了我的代码、请仔细查看。
HII Manoj、
请问我该怎么办?
目前、我正在尝试在下面执行此操作
我想首先向要从中读取的从器件发送定位器地址(Master_Transmitter -发送存储器地址和从器件地址、TRX=1)
然后是我要发送的起始条件
然后、我使用重复启动条件调用 master_receiver 函数、并从 EEPROM 获取一些数据。
我正在尝试执行这一步骤、但看起来这不是我想读取该地址的寄存器/存储器地址、我认为这不会执行
请告诉我使用我的代码正确发送随机读取请求。
谢谢、此致
Ashish Bhoi
您使用的是哪个 EEPROM?
请使用 I2C 协议分析器发送 SCL/SDA 范围截屏。
我正在使用 CSI 24C16 EEPROM 器件、从器件地址0x50。
我没有 I2C 协议分析器、我可以从示波器向您发送示波器截图。
Ashish、
我在 I2C 逻辑分析仪图像中明确说明了执行 EEPROM 随机读取所需的确切方式。
您是否与 EEPROM 制造商核实了您是否以正确的格式发送地址? 您的 EEPROM 是否希望地址采用相同的格式?
此致、
曼诺伊
我需要尽快解决这个问题 Manoj 先生、请帮我、您看一下我的代码、
我应该在哪里更新我想知道的 Sir。
是我发送启动和停止条件的方式是正确的。
我简要回顾了您的代码、我认为您没有正确使用 I2C 写入/读取功能。 请使用下面显示的伪代码来配置 I2C 写入/读取函数。 这假设您使用的是 I2C FIFO。
这是 I2C_Write_byte 的伪代码
1) 1)在主机发送器模式下配置 I2C、并启用重复模式
2) 2)将 EEPROM 从器件地址(0x50表示 EEPROM、我有)写入 I2CSAR 寄存器
3) 3)通过设置 I2CMDR.STT = 1来生成启动条件
4) 4)将 EEPROM 地址写入 I2CDXR 寄存器 (假设您正在尝试写入 EEPROM 地址0x20、那么您需要在 I2CDXR 寄存器中写入0x20)
5) 5)将要写入 EEPROM 的数据写入 I2CDXR 寄存器(假设我们正在尝试写入 EEPROM 地址0x20 =数据)
6)等待 I2CTX FIFO 为空(I2CFFTX.TXFFST = 0?)
7) 7)一旦 TXFIFO 为空、生成停止条件(I2CMDR.STP= 1)
这是 I2C_READ_BYTE (随机读取)的伪代码
此代码分为两部分
a)首先是主发送器部分、用于发送要读取的 EEPROM 地址
1) 1)在主机发送器模式下配置 I2C、并启用重复模式
2) 2)将 EEPROM 从器件地址(0x50表示 EEPROM、我有)写入 I2CSAR 寄存器
3) 3)通过设置 I2CMDR.STT = 1来生成启动条件
3) 3)将 EEPROM 地址写入 I2CDXR 寄存器 (要从中读取的 EEPROM 地址)
4) 4)等待 I2CTX FIFO 为空(I2CFFTX.TXFFST = 0?)
b)第二部分是从 EEPROM 接收数据的主接收器部分
1) 1)在主机接收器模式下配置 I2C 并启用重复模式
2) 2)通过设置 I2CMDR.STT = 1 (这是重复的启动条件)来生成启动条件
3) 3)等待 I2CRXFIFO 接收到一个字节 (I2CFFTX.RXFFST = 1?)
4) 4)读取 I2XDRR 寄存器//此数据存储在 EEPROM 地址中
5)生成停止条件(I2CMDR.STP= 1)
此致、
曼诺伊
Ashish、
我们发布了新的 I2C 示例、其中显示了如何使用轮询和中断方法与 EEPROM 进行通信。 请查看以下路径中的示例。
您可以轻松地将其修改为其他 I2C 接口、例如温度传感器或闪存等
EEPROM 轮询方法
\\driverlib\f28004x\examples\i2c\i2c_ex4_EEPROM_Polling
EEPROM 中断方法
\\driverlib\f28004x\examples\i2c\i2c_ex4_EEPROM_interrupt
此致、
曼诺伊