This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DM365开发SPI通过DMA工作在从模式的实现



您好:

      我们项目中需要通过SPI端口传输图像数据,由于硬件原因,DM365 SPI必须工作在从模式,图像数据量较大,为了降低CPU负载,必须通过DMA方式。

     我们的问题是,DM365提供的开发环境中SPI子系统

和DMA子系统是否可以支撑这种工作模式?需要实现哪些驱动代码?最好有参考的模板代码,能否推荐一份?

    谢谢!

  • 除了SPI4,其它SPI口都可以用EDMA独立控制,驱动里有。

  • Jason您好,

             驱动代码仅支持master模式吧,能否详细点,需要参考和修改那几个文件?

    不吝赐教,多谢指点。

       email:bg7jns@163.net

  • 1. 这个我具体没有Coding过,如果Driver的EDMA只支持主模式,还是放弃的好,自己做从模式再做EDMA控制太难

    2. 你能否从整个系统说一下应用,也许有别的办法,贴个系统框图

  • 可能没有说的这么复杂,我想软件无论如何不会将硬件功能限制死。具体应用是这样的:

    有一个通信模块,负责数据的收发任务。使用DM365负责图像的编码和解码任务。两者

    通过SPI端口进行数据的交换。编码发射过程中,DM365每完成一帧图像的编码,就通知通信模块将该帧数据取走;

    接收解码过程,DM365每完成一帧图像的解码,就通知通信模块送下一帧的数据。

     

    由于硬件条件的限制,通信模块的SPI必须工作在主模式,因此DM365就只能工作在从模式了。为了数据交互,

    设置了两根握手信号线,由DM365输出5us的脉冲,以中断方式分别通知通信模块接收图像数据或者发送图像数据。

     

    从上面的过程可以看出,数据的收发起始是由DM365发起的,是一种变相的主模式。但SPI的片选和时钟则由通信模块提供。

    我觉得开发平台提供的EDMA驱动是不区分SPI主从模式的,但SPI的驱动则只实现的主模式。现在的工作就是修改部分代码,

    让SPI以从模式运行,达到数据交换的目的。

     

    附件是结构简图,供参考。不吝赐教,多谢!

  • 1. 这样的话没有其它办法,只能修改寄存器使得SPI工作在从模式,EDMA的驱动是封装好的,做事件触发,只是调试起来会麻烦一些

  • 经过分析SPI子系统的代码结构,结合本项目的实际情况,基本确定了修改思路:在清楚了解SPI运行机理的基础山上,废弃原来繁琐冗长的驱动代码,重新开发简洁使用的一套驱动,实现更简单,效率更高。

  • 简单的来说只要在驱动初始化的时候将master模式改为从模式,就可以工作,但是真正要完成传输,由于linux的框架中并不支持spi从模式,所以需要自己想办法实现同步机制和与应用层相关的交互.