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.

[参考译文] BQ35100:DataFlash 写入问题

Guru**** 2553260 points


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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/880993/bq35100-dataflash-write-issue

器件型号:BQ35100


您好!

我正在尝试修改操作配置 A 值以执行 EOS 操作。
我在非密封模式下成功访问 DataFlash、然后在全访问模式下读取控制状态值0x2080。 之后、我在0x41b1 (默认值0x80)成功读取 Operation Config A 寄存器的当前值。
现在、我要将其更改为0x82、如下所示:

  1. 写入(0x3E,0xb10x41)
  2. 等待1秒钟
  3. 写入(0x40、0x0082)
  4. 等待1秒钟
  5. 写入(0x60、0x008b)
  6. 等待1秒钟
  7. 写入(0x61、0x005)

此时、我将返回以下数据:




我的校验和和和长度的计算如下:

uint8_t calChecksum (dfAddress、rxBuffer datain、uint8_t length){
uint8_t hNibble、lNibble;
uint8_t 校验和;

hNibble = HI_nibble (address);
lNibble = LO_nibble (address);

校验和= hNibble + lNibble;

校验和+= datain[0];
校验和+= datain[1];

返回~校验和;
}
dataLength = 4 + length; 



校验和和长度是否严格? 有人能解释为什么我会得到这些价值?  我怀疑是计时问题、但我不确定。  

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

    Vincenzo、

    在您的示例中、校验和应为

    0x41 + 0xb1 + 0x00 + 0x82 =非(0x74)= 0x8B。  

    您的长度应为0x06。  

    那么我将写入

    (0xAA、0x3E、[0xb1、0x41、0x82、 0x00])

    (0xAA、0x60、[0x8b、0x06])

    谢谢、

    Eric Vos

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


    感谢 Eric 的回复!

    正如您所说、我已经尝试了、它运行良好。 但是、我还有其他几个问题:

    1. 如何计算长度? 我执行了 len = address_size + cheksum_size + lenight => 2+1+1 = 4、然后将 data_size 求和、因此4+1 = 5。 显然这是错误的,但为什么呢? 我是否必须将0x0082视为2字节数据?
    2. 当我从地址0x60和0x61读回校验和和和长度时,我不会读出我以前发送的内容,为什么? 示例:发送0x8B 和0x06并接收0xC8 0xC8、但操作配置 A 值如我所述为0x82。
    3. 为什么每次读取校验和和和长度时、它们始终具有相同的值? 我会犯一些错误吗?  

    此致、
    Vincenzo

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


    您好!

    我发现我在0x60处读取了两次、因此问题 n3完成了。 我检查了更好的代码、现在我将0xC8作为校验和、将0x24作为长度、但我不明白为什么。  

    此致、
    Vincenzo