cancel
Showing results for 
Search instead for 
Did you mean: 

STM32H7 SAI synchronization clarification

sweera
Associate II

In the STM32H7 ref manual (RM0433 - Section 51.4.4), the following is said about configuring an SAI block in synchronous mode with the other SAI block in the same SAI peripheral

SAI-synchro-manual.PNG

I'm confused about the following statements:

  • Typically, the audio block in synchronous mode can be used to configure the SAI in full duplex mode

What is meant by full duplex mode above?

  1. One of the two audio blocks can be configured as a master and the other as slave
    OR
  2. Both as slaves with one asynchronous block (corresponding SYNCEN[1:0] bits set to 00 in SAI_xCR1)
    and one synchronous block (corresponding SYNCEN[1:0] bits set to 01 in the SAI_xCR1).

Option A makes sense to me, but for option B, is it valid for a slave block to be Asynchronous ?

My SAI implementation on STM32H753 is configured as follows, is this a valid synchronization setup?

SAI2-A : Master transmitter, asynchronous

SAI2-B : Slave receiver, synchronous with SAI2-A

SAI3-A : Slave transmitter, synchronous with SAI2

SAI3-B : Slave receiver, synchronous with SAI2

SAI2 SYNCOUT has been set to block A

1 REPLY 1
LCE
Principal

Full duplex means that one block within on1 SAI is transmitter, the other receiver (e.g. for a stereo codec).

I also don't get the meaning of that RM excerpt.

But your setup makes sense. If you are using CubeMX, better check the CR1 SYNC_EN settings, which should be:

SAI2-A : Master TX, async: SYNC_EN = 00

SAI2-B : Slave RX, sync with SAI2-A: SYNC_EN = 01

SAI3-A : Slave TX, sync with SAI2: SYNC_EN = 10

SAI3-B : Slave RX, sync with SAI2: SYNC_EN = 10

with SAI2 SAI_GCR SYNCOUT = 01 -> 2A as sync source 

I love the H7 SAI's internal sync capability - but I am a little disappointed that the I2S can't be sync'd internally (just doing the routing, terrible...)