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.

[参考译文] BQ76940:BQ76940 SDA 无法响应寄存器信号。

Guru**** 2535750 points
Other Parts Discussed in Thread: BQ76940

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/860688/bq76940-bq76940-sda-cannot-respond-to-register-signals

器件型号:BQ76940

你(们)好

BQ76940 IIC 读写功能、由 IO 端口进行仿真。

GeneralReturnType BqIf_SetDeviceByte (uByte addr、uByte 数据)

uByte I = 0;
uByte wr_CRC;
uByte calc_crc_data[3];

_DI ();//关闭中断

CALC_CRC_DATA[0]= BQ76940_WR
CALC_CRC_DATA[1]=地址;
CALC_CRC_DATA[2]=数据;

WR_CRC = CRC8_CHECK (calc_CRC_DATA、3)//计算 CRC

//写入3次,直至写入正常
对于(I = 0;I < 3;I++)

BqIICStart();//
BqIf_WriteByte (BQ76940_WR);  
if (BQIF_ERR_OK!= BqIF_IICAckDevice())

BqIf IICStop();
继续;

BqIf_WriteByte (addr);
if (BQIF_ERR_OK!= BqIF_IICAckDevice())

BqIf IICStop();
继续;

BqIf_WriteByte (data);
if (BQIF_ERR_OK!= BqIF_IICAckDevice())

BqIf IICStop();
继续;

BqIf_WriteByte (wr_CRC);
if (BQIF_ERR_OK!= BqIF_IICAckDevice())

BqIf IICStop();
继续;

BqIf IICStop();
中断;

_EI();
if (i >= 3)

返回 BQIF_ERR_WR;

返回 BQIF_ERR_OK;

写入寄存器0x05、数据为0x00。
读取时、读取指令具有 ACK 反馈、但我最初希望读取0x05地址。 SDA 被 BQ 低电平更改、并且没有 ACK 响应。 如果写入正确、时序不应错、如下图所示、代码是一个简单的测试代码、仅发送读取指令和寄存器地址

_DI();
BqIICStart();
BqIf_WriteByte (0x11);

if (BQIF_ERR_OK!= BqIF_IICAckDevice())




BqIf_WriteByte (0x05);


if (BQIF_ERR_OK!= BqIF_IICAckDevice())

BqIf IICStop();

其他

BqIf IICStop();


_EI();

时序图如下所示
正在等待您的回复。
谢谢
星号
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Star:

    我不是程序员、因此我不会关注语法的详细信息或知道所述函数中的内容。

    第一个波形看起来像是与数据表图9 http://www.ti.com/document-viewer/BQ76940/datasheet/communications-subsystem-slusbk22004#SLUSBK22004相对应的寄存器写入 。

    第二个波形是从先前设置的地址读取的、实际上是图11的第二部分、因为它从开始而不是重新开始。  似乎 BQ 被告知读取(0x11)、发送值0x05、主机不会 ACK。  再说一次、作为程序员、我不确定代码、但似乎可以看到主机同时发送0x11和0x05。  由于这是一个开漏总线、BQ 需要发送高电平或"1"、以查看总线上的主机写入情况。

    如果不是问题、请再次询问。