请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:BQ40Z80 您好!
我正在尝试通过 SMBus 访问 BQ40Z80的数据闪存。 为此、我参考技术参考手册( c) 第146-147页。 这 是我针对数据闪存访问存储器找到的内容:

我希望从寄存器0x4CE9 (温度阈值)获取信息、因此我编写了以下代码:
#包含
const uint8_t deviceAddress = 0x0B;
const uint16_t startingAddress = 0x4CE9;//替换为所需的起始地址
const uint8_t manufacturerBlockAccess = 0x44; //制造商块访问命令
void setup(){
Wire.begin(); //初始化 SMBus 通信
Serial.begin(9600); //初始化串行通信
}
void loop(){
//使用 ManufacturerBlockAccess ()和起始地址发送 SMBus 块写入
//格式:ManufacturerBlockAccess ()+起始地址(小端字节序)
uint8_t writeData[3];
writeData[0]= manufacturerBlockAccess;
writeData[1]=启动地址& 0xFF; //起始地址的低字节
writeData[2]=(startingAddress >> 8)& 0xFF;//起始地址的高字节
//启动传输
Wire.beginTransmission(deviceAddress);
//发送写入数据
Wire.write (writeData、3);
//结束传输
Wire.endTransmission ();
//延迟以允许设备有时间处理写入操作
延迟(10);
//使用 ManufacturerBlockAccess ()发送 SMBus 块读取
//格式:ManufacturerBlockAccess ()
Wire.beginTransmission(deviceAddress);
//发送读取命令
Wire.write (manufacturerBlockAccess);
//结束传输
Wire.endTransmission ();
//从 SMBus 器件请求数据块(32字节)
Wire.requestFrom (deviceAddress、34);//起始地址包含两个额外的字节
//检查数据是否可供读取
如果(Wire.available()>= 34){
//读取并处理接收的数据
uint8_t receivedData[34];
for (int i = 0;i < 34;i++){
receivedData[i]= Wire.read();
}
//将起始地址的低字节和高字节组合在一起(小端字节序)
uint16_t receivedStartingAddress =(uint16_t (receivedData[2])<< 8)| receivedData[1];
serial.println ("接收的数据:");
serial.print ("起始地址:0x");
serial.println (receivedStartingAddress、hex);
//打印32个字节的 DF 数据
for (int i = 3;i < 33;i++){
serial.print ("数据");
serial.print (i - 2);
serial.print (":0x");
serial.println (receivedData[i]、hex);
}
}
delay (1000);//等待一段时间后再执行下一个操作
}
在写入过程中、器件不进行确认、可能是因为我误解了该过程。 您能否检查一下代码、并告诉我在向 BQ40Z80请求信息时是否有任何问题?
