大家好,
我现在在DM368上进行开发,我的应用需要将编码的图像数据通过SPI发送出去。现在是在我们的板子上测试。使用SPI1作为master,SPI2作为slave来模拟发送和接收。信号线连接为: SPI1的SIMO连接到SPI2的SIMO,SPI1的CLK连接到SPI2的CLK,其他信号线没有连接。使用DMA方式进行数据传输。
测试时,SPI1循环通过DMA发送256字节的数据,每秒1次。SPI2通过内核线程使用DMA方式接收,每次接收256字节。在我的测试中,出现了以下问题,找不到原因了。希望大伙儿给支支招,先谢谢了。
1、SPI1循环发送,通过示波器查看传输的数据,发现偶尔会出现我要发送的第二个字节不见了,第一个字节后紧跟的就是第三个字节的数据。
2、内核线程接收时,收到的第一个字节为哑元,要怎么消除它? 我在设置接收DMA参数前读取了接收的buf寄存器,但是依然会收到它。
3、内核线程接收时,刚开始可以正常接收,收到的数据与示波器上显示的一致。但是跑了一阵后,就收不到了。应该是卡在了等待DMA传输的信号量上。通过打印死等后的DMA参数,发现接收通道的EMR和ER都是置位的,说明接收事件SPI2已发送给了EMDA3的控制器,打印出来的paRAM参数是设置的值,数值没有减少表示一个数据都没有接收,DMA没有开始接收,这是为什么呢? 难道出现EMR置位就不会再继续收了吗?(此时SPI1的发送还可以继续)
4、我的发送和接收驱动是从DM368的内核2.6.18中的davinci_spi_master.c中修改而来。流程上与其中的DMA发送是一致的。
坐等高手回复!
zhaoli:
我也很不幸的遇到和你相同的问题,
测试模式:SIMO和MISO直接短接,当SPI驱动工作在DMA模式下时,rx_callback总是会由于DMA_CC_ERROR被调用,即DMA出现了事件丢失。但并没有影响到第二次的接收,问题是收到的第一个字节总是0,也就是你说的哑元。但工作在poll模式时不会出现此问题。
不知道你的问题解决没有,希望与你交流。