请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
主题中讨论的其他器件:AM3358工具/软件:TI-RTOS
您好!
我尝试在我的定制 am3358板(phytec phycore AM335x)上使用 i2c 绑定的 EEPROM。 可通过 I2C ID 0x52对其进行访问、我想将配置数据存储在此 EEPROM 中。
我使用以下代码运行 I2C 从任务读取:
char i2c_read (int RegAdd、int address、int channel) { uint8_t txBuffer[1]={RegAdd}; char rxBuffer[1]={0}; I2C_Handle 句柄; 如果(通道= 1) { 句柄= i2c_chan1_init(); } 否则、如果(通道= 0) { 句柄= i2c_chan0_init(); } int16_t transferStatus; I2C_Transaction i2cTransaction; I2C_TransactionInit(&i2cTransaction); i2cTransaction.slaveAddress =地址; i2cTransaction.readBuf =(uint8_t *)&rxBuffer[0]; i2cTransaction.writeBuf =(uint8_t *)&txBuffer[0]; i2cTransaction.writeCount = 1; i2cTransaction.ReadCount = 0; i2cTransaction.timeout = 100; transferStatus = I2C_transfer (handle、&i2cTransaction); Task_sleep (100); i2cTransaction.readBuf =(uint8_t *)&rxBuffer[0]; i2cTransaction.writeBuf =(uint8_t *)&txBuffer[0]; i2cTransaction.writeCount = 0; i2cTransaction.ReadCount = 1; i2cTransaction.timeout = 100; transferStatus = I2C_transfer (handle、&i2cTransaction); I2C_Close (handle); 返回 rxBuffer[0]; }
写入函数遵循以下原理图:
int16_t i2c_write (char buf[5]、int address、int channel) { I2C_Handle 句柄; 如果(通道= 1) { 句柄= i2c_chan1_init(); } 否则、如果(通道= 0) { 句柄= i2c_chan0_init(); } int16_t transferStatus; I2C_Transaction i2cTransaction; I2C_TransactionInit(&i2cTransaction); i2cTransaction.slaveAddress =地址; i2cTransaction.readBuf =空; i2cTransaction.ReadCount = 0; i2cTransaction.writeBuf =(uint8_t *)&buf[0]; i2cTransaction.writeCount = 2; i2cTransaction.timeout = 2000; transferStatus = I2C_transfer (handle、&i2cTransaction); I2C_Close (handle); 返回传输状态; }
我的问题是写入和读取功能都没有成功执行、我找不到其他用于写入或读取 EEPROM 的示例。
即使我尝试使用 i2cset 从 Yocto Linux 内对 EEPROM 进行编程、 我也不成功。 i2cdump 返回许多0xFF。
写入使能引脚通过 phycore SOM 上的10k Ω 电阻器拉至 GND。 我希望你能帮助我。
此致、
Jim
编辑:是否有任何现有驱动程序可将数据存储在非易失性存储器中,例如 SPI 或 Nand 闪存 ?