主题中讨论的其他器件:BQ78350
工具与软件:
您好!
我正在研究制造商访问命令的实现。 在技术参考中,它提到了读取操作状态或制造商状态,使用制造商块访问(0x44)或制造商数据(0x23) 。 但关于(0x44)或(0x23)的信息不够。 我不使用 Bq Studio。
我想使用代码执行读写操作。
有人可以帮助您读取使用0x44和0x23的命令吗?
提前感谢您!
此致、
Kaushalya.
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.
工具与软件:
您好!
我正在研究制造商访问命令的实现。 在技术参考中,它提到了读取操作状态或制造商状态,使用制造商块访问(0x44)或制造商数据(0x23) 。 但关于(0x44)或(0x23)的信息不够。 我不使用 Bq Studio。
我想使用代码执行读写操作。
有人可以帮助您读取使用0x44和0x23的命令吗?
提前感谢您!
此致、
Kaushalya.
请使用0x44并按照 TRM 17.2 0x00 ManufacturerAccess ()和0x44 ManufacturerBlockAccess ()的指令操作
如果您希望读取 OperationStatus、则首先必须向0x00或0x44发出 smbus 写入字命令并带有0x0054 (= OperationStatus)、然后向0x00或0x44发出 smbus 读取块命令。
如果您发出了0x0054 (= OperationStatus)、读取块命令将返回4个字节。 这4个字节的含义在 TRM 17.2.38 ManufacturerAccess () 0x0054 OperationStatus 中进行了说明
我将通过这种方式尝试读取操作状态
// MAC (0x00)定义
void Write_Manufacturer (uint16_t MacCmd)
{
uint8_t data_length=2;
uint16_t txbuffer[2]={MacCmd & 0xFF、(MacCmd >> 8)& 0xFF};//小端字节序格式
I2C_Write_2byte (MANUFACTURERACCESS_subcommand、txbuffer、DATA_LENGTH);
}
//将操作状态写入0x00
Write_Manufacturer (470X0054);
//读取0x0054
bms_get_manufacturer_block_access();
// 0x44的定义
void BMS_GET_MANUFACTURER_BLOCK_ACCESS (void)
{
vHAL_RIIC_RECEIVE (&BQ78350_subcommand[MANUFACTURBERBLOCKACCESS_subcommand].command、BQ78350_subcommand[MANUFACTURBERBLOCKACCESS_subcommand].dataptr、BQ78350_subpath命令[MANUFACTURERBLOCKACCESS_subcommand_len);
}
是否 需要修改 BMS_GET_MANUFACTURER_BLOCK_ACCESS、您能否确认可以进行哪些更正?
此外,在第17.2.1节中,它被写为"读取该命令返回 OperationStatus()数据的最低16位"。 这是什么意思?
Kaushalya,
我无法评论您的 UC 特定代码(例如 vHAL_RIIC_RECEIVE)。
我可以就电量计相关问题为您提供支持。
例如、根据我之前的回复:"如果您要读取 OperationStatus、则必须首先发出 smbus 写入字命令(0x00或0x44)和0x0054 (= OperationStatus)、然后发出 smbus 读取块命令(0x00或0x44)。"
我再也不能把它分解出来了。 在我看来、主机 UC 上可能没有工作中的 smbus 编写字函数。 SMBus 是由另一个实体(而非 TI)开发和拥有的标准。
下面是我的句子在伪代码中的版本、使用必须从您的 UC 供应商处获得的 API。
此 API 必须实现:
SMBUS_WRITE_WORD (uint8_t 命令、uint16_t 字);
SMBUS_READ_BLOCK (unit8_t 命令、uint8_t []块);
OperationStatus():
SMBus_WRITE_WORD (0x00、0x0054);
SMBus_READ_BLOCK (0x00、BLOCK_DATA[]);
OperationStatus =(uint32_t) block_data[0、3];