工具/软件:TI-RTOS
您好!
在 BIOS_start()之前,我需要通过 I2C0主器件对外部 EEPROM 进行读写。 下面是我用于读取和写入操作的代码片段。 外部 EEPROM 的位置0x0000中的值为0x03。 但读取的值始终为零。
如何在 BIOS_start()之前执行 EEPROM 读取和写入?
#define EPPROM_DEVICE_ADDRESS 0xAE
#define EEPROM_ADDRESS (EPPROM_DEVICE_ADDRESS >> 1)
void EepromRead (uint16_t address_u16、uint8_t * rxdata、uint8_t rxdataLen)
{
uint8_t ret = 0;
uint8_t address_u8;
I2CMasterSlaveAddrSet (I2C0_BASE、EPPROM_DEVICE_ADDRESS、false);
while (I2CMasterBusy (I2C0_BASE)){}
SysCtlDelay (1000);
I2CMasterDataPut (I2C0_BASE、0x00);//读取
I2CMasterControl (I2C0_BASE、I2C_MASTER_CMD_BURST_SEND_START);
while (I2CMasterBusy (I2C0_BASE)){}
SysCtlDelay (1000);
address_u8 =(uint8_t)(address_U16 >> 8);
I2CMasterDataPut (I2C0_BASE、ADDRESS_u8);//第一个字地址
I2CMasterControl (I2C0_BASE、I2C_MASTER_CMD_BURST_SEND_CONT);
while (I2CMasterBusy (I2C0_BASE)){}
SysCtlDelay (1000);
address_u8 =(uint8_t)(address_U16);
I2CMasterDataPut (I2C0_BASE、ADDRESS_u8);//第二个字地址
I2CMasterControl (I2C0_BASE、I2C_MASTER_CMD_BURST_SEND_FINISH);
while (I2CMasterBusy (I2C0_BASE)){}
SysCtlDelay (1000);
I2CMasterSlaveAddrSet (I2C0_BASE、EPPROM_DEVICE_ADDRESS、TRUE);
while (I2CMasterBusy (I2C0_BASE)){}
SysCtlDelay (1000);
I2CMasterControl (I2C0_BASE、I2C_MASTER_CMD_SINGLE_Receive);
while (I2CMasterBusy (I2C0_BASE)){}
SysCtlDelay (1000);
RET = I2CMasterDataGet (I2C0_BASE)& 0xFF;
rxdata[0]= ret;
}
void main()
{
uint8_t rxBuff[1];
EepromRead (0x0000、rxBuff、1);
System_printf ("数据读取%x\n"、rxBuff[0]);
}