主题中讨论的其他器件: BQSTUDIO
我正在使用 bq34z100-G1、通过 I2C 从微控制器进行通信。
类型和版本返回的 control()子命令:
-设备类型:0x0100
- FW_VERSION:0x0016
- HW_VERSION:0x0080
配置睡眠和全睡眠模式时遇到问题、以及
在处理闪存时注意到一些奇怪的情况。 添加了数据表部分
"7.3.3.1访问数据闪存"说明了如何从中读取和写入
闪存、用于没有数据命令的设置。 我复制了
以下重要段落:
>要单独访问数据闪存位置、该块包含数据闪存位置
>必须将所需的数据闪存位置传输到
>命令寄存器的位置、可在其中将它们读取到主机或
>直接更改。 这是通过发送 set-up 命令来实现的
>带数据0x00的 BlockDataControl()(代码0x61)。 高达32字节
>数据可以直接从 BlockData()命令位置读取
> 0x40…0x5F、外部改变、然后重新写入 BlockData()
>命令空间。 或者、可以读取、更改特定位置、
>、如果它们对应的偏移量用于索引到中、则会重新写入
> BlockData()命令空间。 最后是驻留在命令中的数据
>空间一旦的校验和正确、就会传输到数据闪存
>整个块被写入 BlockDataChecksum ()(命令编号0x60)。
该示例执行了以下步骤、我已经执行了这些步骤。
请注意、我查看的是用于睡眠电流的子类68偏移2、而不是
64类偏移0、如示例所示。
1.拆开器件的密封。 我的器件未按照进行密封
状态寄存器。
2.将0x00写入 BlockDataControl (0x61)以启用块数据
闪存控制。
3.将0x44 (电源配置子类)写入 DataFlashClass
(0x3E)来访问寄存器子类。
4.将块偏移量(0x00)写入 DataFlashBlock (0x3F)
5.读取0x42 (休眠电流)。 默认睡眠为0x0a
电流为10mA。 得到0xf0。 然后、不是仅读取0x42、
我从0x40到0x5F 读取所有32个字节。 看看我看到的情况
预期值。
6.从 BlocKDataChecksum (0x60)读取1字节校验和。 一
后来发现该值也是错误的。
7.计算新值。 在本例中为0x64、即允许的最大值
休眠电流为100mA。
8.将新值0x64写入偏移量0x42。
9.计算新校验和并将其写入 BlockDataChecksum
(0x60)。 基于中的校验和写入新校验和
BlockDataChecksum 我获得了一个 I2C NAK。 然后、我计算了
校验和、并得到不同的值
比从 BlockDataChecksum 读取的数据多。 计算
基于我的更改的整个块的校验和似乎有效。
我写入该校验和、不获取 I2C NAK、然后读回
整个块并查看我的更改。
10.通过将 RESET (0x0041)子命令写入来重置监测计
控制(0x00)寄存器。
11.密封仪表。 我的器件未密封
从开始。
读取/写入完整块并根据计算校验和
我能够进行一些更改的完整块。
然后、当我引导时、器件会根据进入睡眠模式
状态寄存器。 在我的调试过程中的早期阶段
我记得、在消耗更多功率后、它会正确地离开睡眠模式。
但是、现在它每秒在睡眠模式和正常模式之间循环一次。
我每100ms 通过 I2C 读取一次状态寄存器、并看到它从中变化
睡眠模式更改为正常、然后一秒后返回睡眠模式等
我还尝试使器件进入完全睡眠模式。 我设置 FS 等待
并使用了 SET_FULLSLEEP 控制子命令。 至少提前一次
对 I2C 消息完全没有响应。 现在是状态寄存器
显示了 FULLSLEEP 位始终置位、即使数据表显示:
>指示 bq34z100-G1处于完全睡眠模式的状态位。 对
>置位时。 只能通过监控使用的电源来检测状态
> bq34z100-G1、因为任何通信都会自动将其清除。
问题:
—我不能正确读取/写入单个字节的任何想法
在加载块之后?
-是否有任何方法可以完全重置为的出厂默认值
所有设置? 还是需要固件闪存?
-是否有方法从基于 Linux 的系统刷写固件
计算机?
-在数据表中,如何读取 FULLSLEEP 位设置
这应该是不可能的?
-每个版本是否有硬件或固件勘误表列表?
我并不是说、肯定有什么问题
硬件或固件、但我看到的行为足够奇怪
我想知道我是否需要观察到任何问题
输出。
——谁能给出配置步骤的完整示例
是否已成功将器件置于睡眠和完全睡眠模式?
我很乐意提供澄清并尝试任何建议。
谢谢、
Evan