spi-dma测试

测试命令
source /my-imx6/03_tools/myimx6_31452_build_env

make zImage && cp /my-imx6/02_source/myzrsource-code/linux/linux-3.14.52/arch/arm/boot/zImage /home/myzr/srv/tftp/ && mv /home/myzr/srv/tftp/zImage /home/myzr/srv/tftp/zImage-myimx6a9

export PATH=$PATH:/my-imx6/03_tools/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin
arm-linux-gnueabihf-gcc -o spidev_test spidev_test.c

/*
原始测试程序命令
./spidev_test -D /dev/spidev1.0
*/

./spidev_test

原来想spi传输数据使用dma的方式,nxp论坛搜索了一下,居然spi没有支持dma,还在某个论坛看到说linux4.2以后的spi传输支持了dma,于是用yocto去编译nxp移植了的4.9.88的sdk,编译出来后,看到4.9.88的sdk和spi提供的测试程序和3.14.52提供的一个样,难道还不支持?;
看来下内核的documentation/spi/ 下面的文档,好想也没有很详细的说明;
既然这样,这个问题绕不过去,只能采用最原始的办法了,在内核驱动源代码里面来修改了,那就只能手动配置寄存器了,看看源代码吧
spi驱动相关的是下面这几个文件
在这里插入图片描述

其中spi-imx.c里面有不少dma相关的函数,看来是支持的
在这里插入图片描述
在spi_imx_dma_transfer函数里面添加打印语句,执行测试程序,spi_imx_dma_transfer函数并没有被执行,而spi_imx_transfer函数是被执行了,那需要做什么配置才会执行dma传输呢,一路添加打印,发现dma被初始化并作了相关的配置的,最后在spi_imx_can_dma这个函数里面看到有如下
在这里插入图片描述我打印出来的spi_imx_get_fifosize这个长度是64,而测试程序里面发送一次的长度是38,意思就是驱动程序作了一次判断,当发送一次数据长度小于64时,不启动dma传输,当长度大于64时,启动dma传输,我把发送数据长度改为100,果然启用了dma传输

折腾了自己一大圈,论坛里面各种帖子只能参考,最主要的永远是源码

猜你喜欢

转载自blog.csdn.net/qq_41903811/article/details/85136134
DMA
今日推荐