各位前辈好,小弟目前有需求用TI BQ40Z80做为电源管理系统,然后用stm32 MCU来读取
电池的资讯,由于BQ40Z80是走SMBus通讯协定
上网爬文发现STM32硬件上支援SMBus是乎有问题,大部份文章都是说明用软件方式模拟
SMBus时序来读取,于是便参考其方式撰写轫体,程式码如下
u8 bq40z80_Get_voltage(u8 address,char* buff)
{
SMbus_Start();
SMbus_Send_Byte(0x16);
GPIO_SetBits(GPIOB,GPIO_Pin_11); // SDA_H
SMbus_Wait_Ack();
SMbus_Send_Byte(0x09);
GPIO_SetBits(GPIOB,GPIO_Pin_11); // SDA_H
Delay_us(80);
SMbus_Wait_Ack();
SMbus_Start();
SMbus_Send_Byte(0x17);
GPIO_SetBits(GPIOB,GPIO_Pin_11); // SDA_H
SMbus_Wait_Ack();
*(buff+0) = SMbus_Read_Byte(1);
*(buff+1) = SMbus_Read_Byte(1);
*(buff+2) = SMbus_Read_Byte(1);
SMbus_Stop();
}
在测试过程中传送Device Addresshoo和ComCode BQ40Z80EVM开发板都有回ACK,但是最后
资料回传都是0,小弟一直无法解决此问题,是否能有高手能帮忙小弟,非常感谢!
https://imgur.com/CTAgU5i
https://imgur.com/nUoBiiw
MSP430回传
https://imgur.com/iQWYk3C