This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] BQ40Z80:DataFlashAccess 问题

Guru**** 2553260 points
Other Parts Discussed in Thread: BQ40Z80

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1277496/bq40z80-dataflashaccess-issue

器件型号: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请求信息时是否有任何问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Luigi:

    我们不会读取代码。 请尝试此序列。  

    1- SMB_WRITE_BLOCK (器件地址、命令、长度)

    2- SMB_READ_BLOCK (器件地址、命令、长度)


    器件地址= 0x17
    命令= 0x44
    对于写入2个字节、长度=视情况而定。 34个字节是整个块。

    请参见下面的一个示例。


    此致、
    何塞·库索