主题中讨论的其他器件: BQSTUDIO
我需要更新 BQ27Z746闪存中的一些值。 (在这种情况下、使用 BQSTUDIO 不是一个选项。) 我注意到 BQ27Z746技术参考手册中的以下陈述:
由于数据闪存的组织结构、更新需要写入由多个数据字节组成的数据块中。 例如、更新 Ra 表需要擦除数据闪存的单页并对更新的 Ra 表进行编程。 潜在的 I2C 时钟拉伸时间最大为40.8ms。 µs 40ms 页擦除和40 μ s 行编程时间(×2行)。
但是、没有关于页面大小的信息、也没有关于如何擦除页面的信息(如果需要)。
我已经确定可以使用以下代码片段从闪存中读取多个字节。 简而言之,我在0x3E (AltManufacturerAccess())写入两字节地址,然后读回 N 字节数据以访问 MACAccess:
def cc_print_flash_test(bus):
block = cc_read_manufacturers_access(0x4020, 6, bus)
b1 = block[0] + (block[1] << 8)
b2 = block[2] + (block[3] << 8)
b3 = block[4] + (block[5] << 8)
print("flash test: {}, {}, {}".format(b1, b2, b3))
def cc_read_manufacturers_access(addr, nbytes, bus):
bus.write_i2c_block_data(BQ27Z746, 0x3e, [addr & 0xff, addr >> 8])
# returned value is [addr_lo, addr_hi, data_0, data_1 ...]
block = bus.read_i2c_block_data(BQ27Z746, 0x3e, nbytes + 2)
return block[2:] # strip addr_lo addr_hi from response
该代码显示"FLASH test:4525、2300、140"、这是 OVP、UVP 和 OCC 的默认值、因此我认为这是从闪存读取数据的正确方法。
但鉴于"更新需要写入包含多个数据字节的数据块"的要求、我犹豫是否尝试写入、因为我看不到任何有关块大小的已发布信息、 因此、我不知道我需要读取/修改/写入多少字节。
欢迎提供指导!