I have a strange issue here trying to read 2x PDM mics from the SAI peripheral and output the audio over the I2S peripheral here on the H7.
I use what appears to be the correct frequency for both peripherals and clear audio coming out, until the imbalance gets to be too much after some seconds. The SAI is called about 1.01 (approximately) times more often per second than the I2S peripheral. Cube MX shows a clock error of 0% for both.
The callback imbalance causes the audio to become distorted once the FreeRTOS queue is full. This queue currently just queues and de-queues items. It will later be used for processing of audio samples away from the DMA Callbacks. Whether this queue is in place or not, it doesn't make a difference. I count the difference in callbacks simply with a callbackImbalance variable, incrementing or decrementing it.
Simply put, HAL_SAI_RxCpltCallback (and half) is called slightly more often than HAL_I2SEx_TxRxCpltCallback (and half).
If I reduce or increase the SAI clock, the amount of the callback imbalance is changed, however this doesn't seem like the right solution as I cannot get the imbalance to go away, just by guessing. The cocks seem to be exactly correct.
SAI: 2.048 Mhz, no divider (Decimation Ratio * Channels * Sample Rate) = 2048000
I2S: 2.048 Mhz, seems to divide internally as there is no settings for it in Cube MX
Here is a log printed from the I2S Complete Callback. As you can see, at call # 382 the imbalance starts, with the SAI being called but I2S hasn't.
--> Started... --> Starting algorithm loop back... Imbalance: 0, SAI: 1, I2S: 1 Imbalance: 0, SAI: 2, I2S: 2 Imbalance: 0, SAI: 3, I2S: 3 Imbalance: 0, SAI: 4, I2S: 4 Imbalance: 0, SAI: 5, I2S: 5 Imbalance: 0, SAI: 6, I2S: 6 Imbalance: 0, SAI: 7, I2S: 7 Imbalance: 0, SAI: 8, I2S: 8 Imbalance: 0, SAI: 9, I2S: 9 Imbalance: 0, SAI: 10, I2S: 10 Imbalance: 0, SAI: 11, I2S: 11 Imbalance: 0, SAI: 12, I2S: 12 Imbalance: 0, SAI: 13, I2S: 13 Imbalance: 0, SAI: 14, I2S: 14 Imbalance: 0, SAI: 15, I2S: 15 Imbalance: 0, SAI: 16, I2S: 16 Imbalance: 0, SAI: 17, I2S: 17 Imbalance: 0, SAI: 18, I2S: 18 Imbalance: 0, SAI: 19, I2S: 19 Imbalance: 0, SAI: 20, I2S: 20 Imbalance: 0, SAI: 21, I2S: 21 Imbalance: 0, SAI: 22, I2S: 22 Imbalance: 0, SAI: 23, I2S: 23 Imbalance: 0, SAI: 24, I2S: 24 Imbalance: 0, SAI: 25, I2S: 25 Imbalance: 0, SAI: 26, I2S: 26 Imbalance: 0, SAI: 27, I2S: 27 Imbalance: 0, SAI: 28, I2S: 28 Imbalance: 0, SAI: 29, I2S: 29 Imbalance: 0, SAI: 30, I2S: 30 Imbalance: 0, SAI: 31, I2S: 31 Imbalance: 0, SAI: 32, I2S: 32 Imbalance: 0, SAI: 33, I2S: 33 Imbalance: 0, SAI: 34, I2S: 34 Imbalance: 0, SAI: 35, I2S: 35 Imbalance: 0, SAI: 36, I2S: 36 Imbalance: 0, SAI: 37, I2S: 37 Imbalance: 0, SAI: 38, I2S: 38 Imbalance: 0, SAI: 39, I2S: 39 Imbalance: 0, SAI: 40, I2S: 40 Imbalance: 0, SAI: 41, I2S: 41 Imbalance: 0, SAI: 42, I2S: 42 Imbalance: 0, SAI: 43, I2S: 43 Imbalance: 0, SAI: 44, I2S: 44 Imbalance: 0, SAI: 45, I2S: 45 Imbalance: 0, SAI: 46, I2S: 46 Imbalance: 0, SAI: 47, I2S: 47 Imbalance: 0, SAI: 48, I2S: 48 Imbalance: 0, SAI: 49, I2S: 49 Imbalance: 0, SAI: 50, I2S: 50 Imbalance: 0, SAI: 51, I2S: 51 Imbalance: 0, SAI: 52, I2S: 52 Imbalance: 0, SAI: 53, I2S: 53 Imbalance: 0, SAI: 54, I2S: 54 Imbalance: 0, SAI: 55, I2S: 55 Imbalance: 0, SAI: 56, I2S: 56 Imbalance: 0, SAI: 57, I2S: 57 Imbalance: 0, SAI: 58, I2S: 58 Imbalance: 0, SAI: 59, I2S: 59 Imbalance: 0, SAI: 60, I2S: 60 Imbalance: 0, SAI: 61, I2S: 61 Imbalance: 0, SAI: 62, I2S: 62 Imbalance: 0, SAI: 63, I2S: 63 Imbalance: 0, SAI: 64, I2S: 64 Imbalance: 0, SAI: 65, I2S: 65 Imbalance: 0, SAI: 66, I2S: 66 Imbalance: 0, SAI: 67, I2S: 67 Imbalance: 0, SAI: 68, I2S: 68 Imbalance: 0, SAI: 69, I2S: 69 Imbalance: 0, SAI: 70, I2S: 70 Imbalance: 0, SAI: 71, I2S: 71 Imbalance: 0, SAI: 72, I2S: 72 Imbalance: 0, SAI: 73, I2S: 73 Imbalance: 0, SAI: 74, I2S: 74 Imbalance: 0, SAI: 75, I2S: 75 Imbalance: 0, SAI: 76, I2S: 76 Imbalance: 0, SAI: 77, I2S: 77 Imbalance: 0, SAI: 78, I2S: 78 Imbalance: 0, SAI: 79, I2S: 79 Imbalance: 0, SAI: 80, I2S: 80 Imbalance: 0, SAI: 81, I2S: 81 Imbalance: 0, SAI: 82, I2S: 82 Imbalance: 0, SAI: 83, I2S: 83 Imbalance: 0, SAI: 84, I2S: 84 Imbalance: 0, SAI: 85, I2S: 85 Imbalance: 0, SAI: 86, I2S: 86 Imbalance: 0, SAI: 87, I2S: 87 Imbalance: 0, SAI: 88, I2S: 88 Imbalance: 0, SAI: 89, I2S: 89 Imbalance: 0, SAI: 90, I2S: 90 Imbalance: 0, SAI: 91, I2S: 91 Imbalance: 0, SAI: 92, I2S: 92 Imbalance: 0, SAI: 93, I2S: 93 Imbalance: 0, SAI: 94, I2S: 94 Imbalance: 0, SAI: 95, I2S: 95 Imbalance: 0, SAI: 96, I2S: 96 Imbalance: 0, SAI: 97, I2S: 97 Imbalance: 0, SAI: 98, I2S: 98 Imbalance: 0, SAI: 99, I2S: 99 Imbalance: 0, SAI: 100, I2S: 100 Imbalance: 0, SAI: 101, I2S: 101 Imbalance: 0, SAI: 102, I2S: 102 Imbalance: 0, SAI: 103, I2S: 103 Imbalance: 0, SAI: 104, I2S: 104 Imbalance: 0, SAI: 105, I2S: 105 Imbalance: 0, SAI: 106, I2S: 106 Imbalance: 0, SAI: 107, I2S: 107 Imbalance: 0, SAI: 108, I2S: 108 Imbalance: 0, SAI: 109, I2S: 109 Imbalance: 0, SAI: 110, I2S: 110 Imbalance: 0, SAI: 111, I2S: 111 Imbalance: 0, SAI: 112, I2S: 112 Imbalance: 0, SAI: 113, I2S: 113 Imbalance: 0, SAI: 114, I2S: 114 Imbalance: 0, SAI: 115, I2S: 115 Imbalance: 0, SAI: 116, I2S: 116 Imbalance: 0, SAI: 117, I2S: 117 Imbalance: 0, SAI: 118, I2S: 118 Imbalance: 0, SAI: 119, I2S: 119 Imbalance: 0, SAI: 120, I2S: 120 Imbalance: 0, SAI: 121, I2S: 121 Imbalance: 0, SAI: 122, I2S: 122 Imbalance: 0, SAI: 123, I2S: 123 Imbalance: 0, SAI: 124, I2S: 124 Imbalance: 0, SAI: 125, I2S: 125 Imbalance: 0, SAI: 126, I2S: 126 Imbalance: 0, SAI: 127, I2S: 127 Imbalance: 0, SAI: 128, I2S: 128 Imbalance: 0, SAI: 129, I2S: 129 Imbalance: 0, SAI: 130, I2S: 130 Imbalance: 0, SAI: 131, I2S: 131 Imbalance: 0, SAI: 132, I2S: 132 Imbalance: 0, SAI: 133, I2S: 133 Imbalance: 0, SAI: 134, I2S: 134 Imbalance: 0, SAI: 135, I2S: 135 Imbalance: 0, SAI: 136, I2S: 136 Imbalance: 0, SAI: 137, I2S: 137 Imbalance: 0, SAI: 138, I2S: 138 Imbalance: 0, SAI: 139, I2S: 139 Imbalance: 0, SAI: 140, I2S: 140 Imbalance: 0, SAI: 141, I2S: 141 Imbalance: 0, SAI: 142, I2S: 142 Imbalance: 0, SAI: 143, I2S: 143 Imbalance: 0, SAI: 144, I2S: 144 Imbalance: 0, SAI: 145, I2S: 145 Imbalance: 0, SAI: 146, I2S: 146 Imbalance: 0, SAI: 147, I2S: 147 Imbalance: 0, SAI: 148, I2S: 148 Imbalance: 0, SAI: 149, I2S: 149 Imbalance: 0, SAI: 150, I2S: 150 Imbalance: 0, SAI: 151, I2S: 151 Imbalance: 0, SAI: 152, I2S: 152 Imbalance: 0, SAI: 153, I2S: 153 Imbalance: 0, SAI: 154, I2S: 154 Imbalance: 0, SAI: 155, I2S: 155 Imbalance: 0, SAI: 156, I2S: 156 Imbalance: 0, SAI: 157, I2S: 157 Imbalance: 0, SAI: 158, I2S: 158 Imbalance: 0, SAI: 159, I2S: 159 Imbalance: 0, SAI: 160, I2S: 160 Imbalance: 0, SAI: 161, I2S: 161 Imbalance: 0, SAI: 162, I2S: 162 Imbalance: 0, SAI: 163, I2S: 163 Imbalance: 0, SAI: 164, I2S: 164 Imbalance: 0, SAI: 165, I2S: 165 Imbalance: 0, SAI: 166, I2S: 166 Imbalance: 0, SAI: 167, I2S: 167 Imbalance: 0, SAI: 168, I2S: 168 Imbalance: 0, SAI: 169, I2S: 169 Imbalance: 0, SAI: 170, I2S: 170 Imbalance: 0, SAI: 171, I2S: 171 Imbalance: 0, SAI: 172, I2S: 172 Imbalance: 0, SAI: 173, I2S: 173 Imbalance: 0, SAI: 174, I2S: 174 Imbalance: 0, SAI: 175, I2S: 175 Imbalance: 0, SAI: 176, I2S: 176 Imbalance: 0, SAI: 177, I2S: 177 Imbalance: 0, SAI: 178, I2S: 178 Imbalance: 0, SAI: 179, I2S: 179 Imbalance: 0, SAI: 180, I2S: 180 Imbalance: 0, SAI: 181, I2S: 181 Imbalance: 0, SAI: 182, I2S: 182 Imbalance: 0, SAI: 183, I2S: 183 Imbalance: 0, SAI: 184, I2S: 184 Imbalance: 0, SAI: 185, I2S: 185 Imbalance: 0, SAI: 186, I2S: 186 Imbalance: 0, SAI: 187, I2S: 187 Imbalance: 0, SAI: 188, I2S: 188 Imbalance: 0, SAI: 189, I2S: 189 Imbalance: 0, SAI: 190, I2S: 190 Imbalance: 0, SAI: 191, I2S: 191 Imbalance: 0, SAI: 192, I2S: 192 Imbalance: 0, SAI: 193, I2S: 193 Imbalance: 0, SAI: 194, I2S: 194 Imbalance: 0, SAI: 195, I2S: 195 Imbalance: 0, SAI: 196, I2S: 196 Imbalance: 0, SAI: 197, I2S: 197 Imbalance: 0, SAI: 198, I2S: 198 Imbalance: 0, SAI: 199, I2S: 199 Imbalance: 0, SAI: 200, I2S: 200 Imbalance: 0, SAI: 201, I2S: 201 Imbalance: 0, SAI: 202, I2S: 202 Imbalance: 0, SAI: 203, I2S: 203 Imbalance: 0, SAI: 204, I2S: 204 Imbalance: 0, SAI: 205, I2S: 205 Imbalance: 0, SAI: 206, I2S: 206 Imbalance: 0, SAI: 207, I2S: 207 Imbalance: 0, SAI: 208, I2S: 208 Imbalance: 0, SAI: 209, I2S: 209 Imbalance: 0, SAI: 210, I2S: 210 Imbalance: 0, SAI: 211, I2S: 211 Imbalance: 0, SAI: 212, I2S: 212 Imbalance: 0, SAI: 213, I2S: 213 Imbalance: 0, SAI: 214, I2S: 214 Imbalance: 0, SAI: 215, I2S: 215 Imbalance: 0, SAI: 216, I2S: 216 Imbalance: 0, SAI: 217, I2S: 217 Imbalance: 0, SAI: 218, I2S: 218 Imbalance: 0, SAI: 219, I2S: 219 Imbalance: 0, SAI: 220, I2S: 220 Imbalance: 0, SAI: 221, I2S: 221 Imbalance: 0, SAI: 222, I2S: 222 Imbalance: 0, SAI: 223, I2S: 223 Imbalance: 0, SAI: 224, I2S: 224 Imbalance: 0, SAI: 225, I2S: 225 Imbalance: 0, SAI: 226, I2S: 226 Imbalance: 0, SAI: 227, I2S: 227 Imbalance: 0, SAI: 228, I2S: 228 Imbalance: 0, SAI: 229, I2S: 229 Imbalance: 0, SAI: 230, I2S: 230 Imbalance: 0, SAI: 231, I2S: 231 Imbalance: 0, SAI: 232, I2S: 232 Imbalance: 0, SAI: 233, I2S: 233 Imbalance: 0, SAI: 234, I2S: 234 Imbalance: 0, SAI: 235, I2S: 235 Imbalance: 0, SAI: 236, I2S: 236 Imbalance: 0, SAI: 237, I2S: 237 Imbalance: 0, SAI: 238, I2S: 238 Imbalance: 0, SAI: 239, I2S: 239 Imbalance: 0, SAI: 240, I2S: 240 Imbalance: 0, SAI: 241, I2S: 241 Imbalance: 0, SAI: 242, I2S: 242 Imbalance: 0, SAI: 243, I2S: 243 Imbalance: 0, SAI: 244, I2S: 244 Imbalance: 0, SAI: 245, I2S: 245 Imbalance: 0, SAI: 246, I2S: 246 Imbalance: 0, SAI: 247, I2S: 247 Imbalance: 0, SAI: 248, I2S: 248 Imbalance: 0, SAI: 249, I2S: 249 Imbalance: 0, SAI: 250, I2S: 250 Imbalance: 0, SAI: 251, I2S: 251 Imbalance: 0, SAI: 252, I2S: 252 Imbalance: 0, SAI: 253, I2S: 253 Imbalance: 0, SAI: 254, I2S: 254 Imbalance: 0, SAI: 255, I2S: 255 Imbalance: 0, SAI: 256, I2S: 256 Imbalance: 0, SAI: 257, I2S: 257 Imbalance: 0, SAI: 258, I2S: 258 Imbalance: 0, SAI: 259, I2S: 259 Imbalance: 0, SAI: 260, I2S: 260 Imbalance: 0, SAI: 261, I2S: 261 Imbalance: 0, SAI: 262, I2S: 262 Imbalance: 0, SAI: 263, I2S: 263 Imbalance: 0, SAI: 264, I2S: 264 Imbalance: 0, SAI: 265, I2S: 265 Imbalance: 0, SAI: 266, I2S: 266 Imbalance: 0, SAI: 267, I2S: 267 Imbalance: 0, SAI: 268, I2S: 268 Imbalance: 0, SAI: 269, I2S: 269 Imbalance: 0, SAI: 270, I2S: 270 Imbalance: 0, SAI: 271, I2S: 271 Imbalance: 0, SAI: 272, I2S: 272 Imbalance: 0, SAI: 273, I2S: 273 Imbalance: 0, SAI: 274, I2S: 274 Imbalance: 0, SAI: 275, I2S: 275 Imbalance: 0, SAI: 276, I2S: 276 Imbalance: 0, SAI: 277, I2S: 277 Imbalance: 0, SAI: 278, I2S: 278 Imbalance: 0, SAI: 279, I2S: 279 Imbalance: 0, SAI: 280, I2S: 280 Imbalance: 0, SAI: 281, I2S: 281 Imbalance: 0, SAI: 282, I2S: 282 Imbalance: 0, SAI: 283, I2S: 283 Imbalance: 0, SAI: 284, I2S: 284 Imbalance: 0, SAI: 285, I2S: 285 Imbalance: 0, SAI: 286, I2S: 286 Imbalance: 0, SAI: 287, I2S: 287 Imbalance: 0, SAI: 288, I2S: 288 Imbalance: 0, SAI: 289, I2S: 289 Imbalance: 0, SAI: 290, I2S: 290 Imbalance: 0, SAI: 291, I2S: 291 Imbalance: 0, SAI: 292, I2S: 292 Imbalance: 0, SAI: 293, I2S: 293 Imbalance: 0, SAI: 294, I2S: 294 Imbalance: 0, SAI: 295, I2S: 295 Imbalance: 0, SAI: 296, I2S: 296 Imbalance: 0, SAI: 297, I2S: 297 Imbalance: 0, SAI: 298, I2S: 298 Imbalance: 0, SAI: 299, I2S: 299 Imbalance: 0, SAI: 300, I2S: 300 Imbalance: 0, SAI: 301, I2S: 301 Imbalance: 0, SAI: 302, I2S: 302 Imbalance: 0, SAI: 303, I2S: 303 Imbalance: 0, SAI: 304, I2S: 304 Imbalance: 0, SAI: 305, I2S: 305 Imbalance: 0, SAI: 306, I2S: 306 Imbalance: 0, SAI: 307, I2S: 307 Imbalance: 0, SAI: 308, I2S: 308 Imbalance: 0, SAI: 309, I2S: 309 Imbalance: 0, SAI: 310, I2S: 310 Imbalance: 0, SAI: 311, I2S: 311 Imbalance: 0, SAI: 312, I2S: 312 Imbalance: 0, SAI: 313, I2S: 313 Imbalance: 0, SAI: 314, I2S: 314 Imbalance: 0, SAI: 315, I2S: 315 Imbalance: 0, SAI: 316, I2S: 316 Imbalance: 0, SAI: 317, I2S: 317 Imbalance: 0, SAI: 318, I2S: 318 Imbalance: 0, SAI: 319, I2S: 319 Imbalance: 0, SAI: 320, I2S: 320 Imbalance: 0, SAI: 321, I2S: 321 Imbalance: 0, SAI: 322, I2S: 322 Imbalance: 0, SAI: 323, I2S: 323 Imbalance: 0, SAI: 324, I2S: 324 Imbalance: 0, SAI: 325, I2S: 325 Imbalance: 0, SAI: 326, I2S: 326 Imbalance: 0, SAI: 327, I2S: 327 Imbalance: 0, SAI: 328, I2S: 328 Imbalance: 0, SAI: 329, I2S: 329 Imbalance: 0, SAI: 330, I2S: 330 Imbalance: 0, SAI: 331, I2S: 331 Imbalance: 0, SAI: 332, I2S: 332 Imbalance: 0, SAI: 333, I2S: 333 Imbalance: 0, SAI: 334, I2S: 334 Imbalance: 0, SAI: 335, I2S: 335 Imbalance: 0, SAI: 336, I2S: 336 Imbalance: 0, SAI: 337, I2S: 337 Imbalance: 0, SAI: 338, I2S: 338 Imbalance: 0, SAI: 339, I2S: 339 Imbalance: 0, SAI: 340, I2S: 340 Imbalance: 0, SAI: 341, I2S: 341 Imbalance: 0, SAI: 342, I2S: 342 Imbalance: 0, SAI: 343, I2S: 343 Imbalance: 0, SAI: 344, I2S: 344 Imbalance: 0, SAI: 345, I2S: 345 Imbalance: 0, SAI: 346, I2S: 346 Imbalance: 0, SAI: 347, I2S: 347 Imbalance: 0, SAI: 348, I2S: 348 Imbalance: 0, SAI: 349, I2S: 349 Imbalance: 0, SAI: 350, I2S: 350 Imbalance: 0, SAI: 351, I2S: 351 Imbalance: 0, SAI: 352, I2S: 352 Imbalance: 0, SAI: 353, I2S: 353 Imbalance: 0, SAI: 354, I2S: 354 Imbalance: 0, SAI: 355, I2S: 355 Imbalance: 0, SAI: 356, I2S: 356 Imbalance: 0, SAI: 357, I2S: 357 Imbalance: 0, SAI: 358, I2S: 358 Imbalance: 0, SAI: 359, I2S: 359 Imbalance: 0, SAI: 360, I2S: 360 Imbalance: 0, SAI: 361, I2S: 361 Imbalance: 0, SAI: 362, I2S: 362 Imbalance: 0, SAI: 363, I2S: 363 Imbalance: 0, SAI: 364, I2S: 364 Imbalance: 0, SAI: 365, I2S: 365 Imbalance: 0, SAI: 366, I2S: 366 Imbalance: 0, SAI: 367, I2S: 367 Imbalance: 0, SAI: 368, I2S: 368 Imbalance: 0, SAI: 369, I2S: 369 Imbalance: 0, SAI: 370, I2S: 370 Imbalance: 0, SAI: 371, I2S: 371 Imbalance: 0, SAI: 372, I2S: 372 Imbalance: 0, SAI: 373, I2S: 373 Imbalance: 0, SAI: 374, I2S: 374 Imbalance: 0, SAI: 375, I2S: 375 Imbalance: 0, SAI: 376, I2S: 376 Imbalance: 0, SAI: 377, I2S: 377 Imbalance: 0, SAI: 378, I2S: 378 Imbalance: 0, SAI: 379, I2S: 379 Imbalance: 0, SAI: 380, I2S: 380 Imbalance: 1, SAI: 382, I2S: 381 Imbalance: 1, SAI: 383, I2S: 382 ... 

