新手上路
- 积分
- 26
- 金钱
- 26
- 注册时间
- 2020-11-8
- 在线时间
- 4 小时
|
1金钱
用模拟i2c写eeprom-24c02,可以实现单个数读、写,读多个数,但不能实现写多个数,测试了如下三个程序,都只能写入单个数,不知问题出在哪里。
void eeprom_write_bytes(uint8_t *_pWriteBuf, uint8_t _usAddress, uint8_t _usSize)
{
while(_usSize--){ eeprom_write_one_byte(_usAddress,*_pWriteBuf);
_usAddress++;
_pWriteBuf++;}
}
void eeprom_write_bytes(uint8_t *_pWriteBuf, uint8_t _usAddress, uint8_t _usSize)
{
uint8_t i; for (i = 0; i < _usSize-1; i++){
eeprom_write_one_byte(_usAddress,_pWriteBuf);
_usAddress++;}
}
void eeprom_write_bytes(uint8_t *_pWriteBuf, uint8_t _usAddress, uint8_t _usSize)
{
uint8_t i;
i2c_start(); #define EEPROM_DEV_ADDR 0xA0 /* 24xx02的设备地址 */ i2c_send_byte(EEPROM_DEV_ADDR | EEPROM_I2C_WR); #define EEPROM_I2C_WR 0 /* 写控制bit */
i2c_wait_ack();
i2c_send_byte(_usAddress);
i2c_wait_ack();
for (i = 0; i < _usSize-1; i++){
i2c_send_byte(_pWriteBuf);
i2c_wait_ack();}
i2c_stop();
}
void eeprom_write_one_byte(u8 WriteAddr,u8 DataToWrite)
{
i2c_start();
i2c_send_byte(EEPROM_DEV_ADDR | EEPROM_I2C_WR);
i2c_wait_ack();
i2c_send_byte(WriteAddr);
i2c_wait_ack();
i2c_send_byte(DataToWrite);
i2c_wait_ack();
i2c_stop();
}
void i2c_send_byte(u8 txd)
{
u8 t;
sda_out();
IIC_SCL_SET(0);//拉低时钟开始数据传输
for(t=0;t<8;t++){
IIC_SDA_SET((txd&0x80)>>7);
txd<<=1;
delay_us(20);
IIC_SCL_SET(1);
delay_us(20);
IIC_SCL_SET(0);
delay_us(20); }
}
|
|