FlexIO BiSS-C master: MA clock count cannot adapt to ACK period, CRC fails at 2.5 MHz I'm using the MIMXRT1186 with the SDK's flexio_biss_polling_transfer example to communicate with a BiSS-C absolute encoder (24-bit ST + 16-bit MT). Problem: At 500 kHz, CRC passes and position data is correct. At 2.5 MHz, CRC always fails. The encoder's ACK period is about 11.8 µs, which equals roughly 30 MA clock periods at 2.5 MHz. Oscilloscope observation shows that the FlexIO master sends a fixed number of MA clocks from the very beginning of the frame, without adjusting for the ACK period. The 30 ACK low-level bits are sampled into the 64-bit receive shifter, pushing the actual START + SCD data out of the shift window. FLEXIO_BISS_CalFrameHeadLen() returns values between 12 and 34, and BISS_VerifyFrame() calibration fails. What I understand about BiSS-C: The protocol requires MA to keep running during ACK, because the encoder needs those clocks to advance its internal state machine and eventually end ACK and send the START bit. So the correct master behavior is: MA keeps sending clocks from the start of the frame, including during ACK. The master monitors SL. The master continuously counts the MA clocks already sent. When SL goes high (ACK ends, START bit arrives), the master records how many clocks were consumed by ACK, then calculates how many more clocks are needed to complete the frame. My question: FlexIO's timer uses a fixed timerCompare value to send a predefined number of clocks in one shot. Is there any FlexIO mechanism to support the adaptive behavior above, i.e., dynamically adjusting the number of remaining MA clocks based on the SL edge during a frame? Specifically: Can FlexIO's timer use the SL edge as a trigger to stop, reset, or reload the timer, so that the master can determine when ACK has ended and then send the remaining clocks? If FlexIO cannot do this, what does NXP recommend for implementing a BiSS-C master that supports long ACK periods (e.g., eFlexPWM, LPSPI, or an FPGA-based solution)? Setup: MCUXpresso SDK for MIMXRT1186 Driver: fsl_flexio_biss.c / .h Oscilloscope monitoring MA (D02) and SL (D00) Thanks for any guidance. 回复: FlexIO BiSS-C master: MA clock count cannot adapt to ACK period, CRC fails at 2.5 MHz Update: NXP has released an official example that solves this issue. AN15161 — BiSS-C Interface Implemented by FlexIO on MCX A366 Project: an-mcxa366-bissc-interface-using-flexio (NXP Application Code Hub) 回复: FlexIO BiSS-C master: MA clock count cannot adapt to ACK period, CRC fails at 2.5 MHz Dear @rejust ,
Thank you for your response. This will be very helpful to others facing the same issue.
Best Regards,
Shelly
View full article