[先楫HPM6750测评之八]细说SPI外设遇到的小曲折
[复制链接]
自从上次的贴子调试不通SPI DMA后,一直搁置到现在,官方也刚好发布了V0.11.0版本,这回又重拾了SPI DMA。
很奇怪的是,把官方的SPI DMA移植过来之后,一直都是不成功,也没法触发到DMA完成中断,用分析仪抓了下波形,也是迟迟没有看到时序的发生。
于是照着官方的例子试下,果不其然,官方的demo是可以运行,通过DMA发送数据。看到了官方的例子有对命令和地址寄存器赋值,于是照着搞个temp的地址和命令对着赋值。果不其然,真的发出去了。数据也完全可以对的上。
按以往的开发经验来说,只需要传输数据的话,禁用掉地址段和命令段,以及也不需要去操作地址和命令寄存器。
但实际上,虽然命令段和地址段都禁用了,这CMD和ADDR两个寄存器是需要进行赋值的。
官方的驱动当中,不管禁止不禁止,都会对相应的寄存器进行赋值
现在可以发送了,但是大数据在分包发送的时候,分包大于512以上就是发送不成功。再次查看了寄存器。TRANSCTRL的数据长度是9Bit,也就是只能512长度。这个SPI IP确实有点独特,以往的开发大多是16位以上的,这也就标志着在进行DMA传输时,也只能发送512分包。
验证一下:
SPI DMA传输,O3代码优化,大概可以45fps
而SPI poll传输,也是O3代码优化,大概可以41fps
这样看来,确实DMA对于SPI的传输帮助并没那么大,主要受限与SPI的数据寄存器最大只能512.
于此,对于使用HPM6750的SPI DMA外设,需要注意以下两点:
1、SPI DMA一次传输最大512字节,超过需要进行分包
2、使用SPI DMA时候,在配置发送的时候,需要对命令和地址寄存器进行赋值,随便一个值都可以
当然,询问了官方,后续这些问题都会有驱动层进行解决,以后的SDK更新也不会有此类问题暴露给用户操作。
|