Skip to main content
Associate II
October 2, 2026
Question

SAI disable order for master and slave block

Section 51.4.15 of the current (RM0433 Rev 8) reference manual for STM32H753 states the order of disabling the SAI master and slave sub-blocks.

Is this true when using multiple SAI blocks on an MCU?

For example:

My SAI configuration is as follows:

SAI 2A - Master TX

SAI 2B - Slave RX

SAI 3A - Slave TX

SAI 3B - Slave RX

Would the correct order of disabling be:

  1. SAI 2A
  2. SAI 2B
  3. SAI 3A
  4. SAI 3B

?

Since the master provides the clocks for the slave SAI blocks, I find it strange that the master should be disabled first, since the slave blocks may be halted during a transaction.

2 replies

AScha.3
Super User
October 2, 2026

As the master - and only the master - generates the clock and frame signals, it's ok to just stop only the master, as all other streams are in sync and are stopped then also, if all streams are setup in sync to the one and only master.

For starting the streams just start all slave streams first ( nothing happens on the lines) then start the master. Now all streams start in sync and will stop in sync when the master is stopped.

 

btw

For audio...the SAI (or I2S ) streams never should be stopped at all !

And all streams running with DMA on circular buffers.

Just start (in correct order, master is last) at begin of your program, then they run all time.

To pause or mute the stream just put zeros to the send buffer (and dont use the received data), but let them run all time, so there never is a problem with sync or lost data.

If you feel a post has answered your question, please click on " Best Answer ".
LCE
Principal III
October 2, 2026

> I find it strange that the master should be disabled first, since the slave blocks may be halted during a transaction.

I don’t. 

The master actually only stops with the current frame completed, so should the slaves.

Stopping the slaves first would rather confuse the DMA buffers and counters, because the master might grab one ore more few samples.

Anyway, I would check the last sample of each slave if it’s still usable. If not discard it.

For audio, a “last sample” at any stop will distort a signal anyway (imagine a sine at peak cut to zero), that’s why we “fade out” audio. Or use windows for DSP.