我用单片机 STM32 通过I2C 操作 BQ27541 的 data flash,. 代码是按 TI 的 MSP430 的exsample 来写的 . 写入的数据和
读取的数据比较,是一致的。但重新上电,Block A 还是初始值 00, 是有什么命令没有送吗? 程序如下:
// Write & read back 32 bytes of data in Manufacturer Info Block A
for (i = 0; i < 32; i++)
{
TxData[i] = i; // Initialize data to be written
}
IIC_Write_One_Byte(bq27541CMD_DFDCNTL, 0);// BlockDataControl() = 0x00
IIC_Write_One_Byte(bq27541CMD_DFCLS, 58);// Write the subclass value
IIC_Write_One_Byte(bq27541CMD_DFBLK, 0);// Select offset within the flash
for (i = 0; i < 32; i++) // Compute the checksum of the block
{
sum += TxData[i]; // Calculate the sum of the values
}
checksum = (0xFF – (sum & 0x00FF)); // Compute checksum based on the sum
IIC_Write_One_Byte(bq27541CMD_DFDCKS, checksum); // Write checksum value
for (i = 0; i < 32; i++) // Write 32 bytes to Info Block A
{
IIC_Write_One_Byte((bq27541CMD_ADF+i), TxData[i]);
}
IIC_Read_Bytes(bq27541CMD_ADF,&RxData[0], 32); // Read the contents of the block
for (i = 0; i < 32; i++) // Check if writes were successful
{
if (TxData[i] != RxData[i]) // Tx & Rx data values match?
{
sum=0 ;//error
}
}
Sheldon Cai:
比较可能的原因是checksum没有写对
Bo Yuan3:
楼主辛苦了~ stm32调了好久,有应答 但是读出来的数据都是0xff i2c程序能否分享一下 不胜感激
du dudu:
回复 Bo Yuan3:
你好,请问您STM32读取BQ27541的问题是怎么解决的?我也遇到了同样的问题。谢谢
user4809644:
回复 du dudu:
需要单片机读写的可以找我,qq 774606398
user4723031:
回复 du dudu:
你好,我也遇到这种情况,能否加一下QQ,交流一下 1026676022
user4723031:
回复 du dudu:
+QQ 1026676022 我也遇到了同样的问题
user4637920:
重新上电后,多次重复写呢,有用吗。写入后,过一段时间再读取看看是否写入成功。
可以用STM32软件模拟I2C试试。