pHAT-DAC on Pi0W - dma transfer could not be terminated


I recently purchased a pHAT-DAC and your solderless header jig from PiHut (you didn’t have the former in stock at the time) and installed on my Pi Zero Wireless. Both install and subsequent configuration went flawlessly. I was able to play sounds through both aplay and shairport-sync.

This am, however, the unit stopped playing half-way through a song and looking at dmesg, I saw a bunch of these lines -
bcm2835-dma dma transfer could not be terminated
Shairport doesn’t seem to have detected an error, but no sound played. I killed shairport and tried a bunch of aplay and sox/play commands, but nothing produced any sounds. More of the same messages may’ve been generated, but there were so many that I couldn’t tell immediately. In any case, I had to reboot the unit before it would play sounds again.

A brief Google did not produce any insight. From visual inspection, my connections (headers on the Pi0 and pHAT and connection betwixt) look solid. Do you have any ideas of what might be wrong? I haven’t had the issue return since the reboot (only been a couple of hours), but am concerned it’ll show up again later. Do I have a defective unit? Should I ask for a replacement pHAT? Is the problem likely to be the pHAT or the Pi0?


It’s certainly not the pHAT since you could remove it altogether and audio would still try to play as if it were there- it’s a write-only device, so the Pi Zero blasts out data and doesn’t care if the pHAT is connected, or not.

It could possibly be the Pi Zero, but it’s more likely to just be a software hiccup of sorts and not related at all to hardware. When you start delving into complex software like Shairport, you’ll certainly run into things like this.

Best thing to do is ignore it for now, and if it starts happening frequently, see if you can find solidarity in the Shairport Sync GitHub issues:

Edit: It could just as well be a software problem on the Pi side, too, and not Shairport at all. But it’s difficult to tell either way without more data.

I have the same error, but mine works. I installed the pirate radio script first (that uses vlc-radio) and the shairport-sync.

I see this first:
[ 12.719150] mmc0: timeout waiting for hardware interrupt.
Followed by low-level errors (assembly?)
Followed by a mmc0: stop error, then a register dump:
[ 13.078674] mmc0: =========== REGISTER DUMP ===========
[ 13.080613] mmc0: SDCMD 0x00004052
[ 13.082556] mmc0: SDARG 0x04dd7000
[ 13.084514] mmc0: SDTOUT 0x00bebc20
[ 13.086477] mmc0: SDCDIV 0x00000008
[ 13.088441] mmc0: SDRSP0 0x00000900
[ 13.090385] mmc0: SDRSP1 0x00001269
[ 13.092310] mmc0: SDRSP2 0xffffffff
[ 13.094217] mmc0: SDRSP3 0x0002c01f
[ 13.096100] mmc0: SDHSTS 0x00000080
[ 13.097935] mmc0: SDVDD 0x00000001
[ 13.099738] mmc0: SDEDM 0x00010801
[ 13.101554] mmc0: SDHCFG 0x0000040e
[ 13.103357] mmc0: SDHBCT 0x00000200
[ 13.105150] mmc0: SDHBLC 0x00000008
[ 13.106906] mmc0: ===========================================
[ 13.109530] bcm2835-dma 20007000.dma: DMA transfer could not be terminated
[ 13.111525] mmcblk0: error -110 transferring data, sector 159416, nr 8, cmd response 0x900, card status 0x80000b00