0
\$\begingroup\$

I am using MCU (L476RG) with PMM240 (power management board) and RRC 2054-2(battery), I am figuring out why SMBus is always busy after sending command to slave, so I captured the waveform when I send command, but I am totally confused, the SMBus address is 0x16(already shifted 1 bit), I found whatever byte I sent(such as 0x01, 0x1c...), I always captured the same waveform as follows(blue line is SDA and yellow line is SCL), and SMBus stays in busy state, how to understand it? many thanks

enter image description here

\$\endgroup\$
0
\$\begingroup\$

It looks like the address 0x16 sent by master is correct because 9th bit that is slightly higher than other low bits is the ACK from slave. But then something holds SCK low. It might be the slave that holds it low until it is ready for next byte. Or it might be the master that is unable to send next byte because of software error. The waveforms are quite noisy and glitchy so make sure it is not a signal integrity issue.

| improve this answer | |
\$\endgroup\$
  • \$\begingroup\$ I see, normally I should have another 9 clocks follow and display my such as 0x01 and so on, but here I only have 9 clocks for the address, the next 9 clocks missing \$\endgroup\$ – adam Jun 28 '19 at 22:54
  • \$\begingroup\$ fixed the problem, 1, the main problem is I could not run step by step for HAL_SMBUS_Master_Transmit_IT(), the scope only capture the address if you use "single" option for trigger menu, you have to give the SMBus a little bit time to capture the full waveform. 2, I did not enable IC2 interrupt option in CubeMX32. \$\endgroup\$ – adam Jul 12 '19 at 18:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.