Hello Dan,
Thank you for your kind reply. It appears you have the microcontroller end of things well in hand. Thus your safeloading routine is operating consistently as you have verified. There's one other detail that just came to mind now. It gave my friend and I fits when we first attempted to safeload a -1701, so perhaps it's causing your difficulty as well.
Although each filter coefficient is four bytes (28 coefficient bits with four zeros on top), we actually need to safeload five bytes per coefficient -- another full byte of padding on the MSB end. Though this is shown in Table 30 of the ADAU1701 data sheet, it can easily be overlooked:
If my memory serves me, Brett G. once described the reason for this (although I can't find the link) -- early in the -1701's design, this extra byte was reserved to allow the safeloading of five-byte program instructions as well as the four-byte parameters. Programming on the fly was dropped, but the zero byte remains.
The IIR filter itself will happily go through the motions of multiplying / delay / adding with any coefficients we send it. If you send merely incorrect coefficients, a grotesque response results. Missing that zero byte in the safeload sequence, however, prevents each new coefficient from loading. Inserting this byte if missing, will likely bring you home.
Best regards,
Bob.