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.

TMS470M SPI 片选信号

 当使用SPI DMA时,假设传输1K的数据那么片选信号在传输过程中是一直低电平,还是每传输一次,片选有效一次?数据手册看的很晕,要是能有 份历程就好了?

  • Hi Yong,

      在使用标准SPI总线传送数据时,在spiDAT1的CS_HOLD位域里面你可以设置关于传输过程中片选信号是一直保持,还是说发送完一次后释放总线,下次发送然后再占有总线。

    你可以利用SPI的loopback功能,做个小例子测试一下。

    Ken

  • 谢谢你的解答,现在的情况是手头没有板子可以调试,现在是想看看这款芯片能否满足我们要求。在选型阶段吧,在TRM中,感觉手册说的不清楚啊,比如在SPDATA1中说CSHOLD信号只在兼容SPI模式中有效,但是我想用TG的DMA方式通信,是不是说这种模式不能使用CSHOLD呢?希望能给个明确答复啊!!谢谢!!

  • Hi yong,

    在MibSPI模式下,一个TG传输过程中,CS信号是一直有效的(低电平)。

    除此之外,MibSPI模式下,仍可以配置CSHOLD。如果使能了CSHOLD,那样在一个TG传输完成后,CS仍将保持有效(低电平)。

    CS控制与是否使用DMA无关。

    Regards,

    Jay

  • Hi Jay

    DMA传输和TG传输的区别我一直没搞清楚,我的理解是这样的,你看看对不,TG传输我的理解是把tms470m06607的64个buffer,分成几个组或者干脆就是一个组,通过事件来触发传输,假设我分的一个组有32个buffer,那么首先传输buffer1 然后传buffer2 以此类推最后是buffer32,。那么DMA是怎么情况呢,比如说在TRM中476页中,DMA in Multi-Buffer Mode说明DMA source or destination should be only the multi-buffer RAM(我的理解是DMA的源地址或目的地址必须是multi-buffer RAM),但是TRM随后说了Each DMA channel has the capability to transfer a block of up to (1)32 data wordswithout interruption using only one buffer of the array by configuring the DMAxCTRL register. Using the DMAxCOUNT and DMACTNTLEN register, up(2) to 65535 (64K) words of data can be transferred without any interruption using just one buffer of the array. This enables the transfer of memory blocks from or into an external SPI memory.。那么我的理解是这样的,如果把multi-buffer RAM作为源地址,假设传输1k数据,那么multi-buffer RAM只有64个数据,是不是意味着这64个数据传完后,我还得重新向multi-buffer RAM写入另外64个数据,那这样一来,不是就跟TG一样了吗,在别的厂家的处理器中,好像直接有个指针来传递数据,只要把源地址,目的地址,传的数量配置好就不用管了,那么咱们这个DMA是不是有些特别呢?

    还有上面的英文中(1)中说每个通道只能传32个数据没有中断,那么(2)中说可以传65535个数据不用中断,这如何解释?

    在(2)中说用just onebuffer of the array ,这个buffer 是在DMAxCTRL说明的,取值范围是0~127,那么这些buffer是对用户可见的吗?如何使用?

    这是我个人一些理解,请指教,关于DMA的使用说明,能给个配置过程或者给个说明文档吗,谢谢!!

  • Hi yong,

    的确我们这个SPI和DMA都有些特殊。

    首先,解释一下MibSPI的TG的概念。TG允许你在不使能DMA的情况下,自动地一次性传输多字节数据,这是标准的SPI所不具有的功能。

    然后,需要澄清TG和DMA是两个独立的功能。TG的传输过程是把MibSPI的Buffer里的数据按次序传输到SPI的TX移位寄存器中向外发送,或从RX移位寄存器中传输到Buffer里。DMA的传输是发生在MCU的系统RAM与MibSPI的Buffer之间,也就是在系统RAM与TG的RAM之间传输数据。

    最后,解释你所述的(1)和(2)看似矛盾的问题。

    我们这个DMA除了有传输源地址、目的地址等寄存器外,还有几个特殊的寄存器。

    DMAxCTRL 寄存器和 DMAxCOUNT 寄存器中都有一个DMA传输数据个数的计数器ICOUNTx和COUNTx,那么要使用那个寄存器中的计数器来控制DMA传输的数据长度,由DMACTNTLEN 寄存器来决定。

    DMAxCTRL中的ICOUNTx最大值为0x1F,也就是说如果使用该寄存器中的计数器,那么DMA一次最多传输32个Words。

    DMAxCOUNT 中ICOUNTx最大值为0xFFFF,这样如果使用该寄存器中的计数器,那么DMA一次最多传输65536个Words了。

    还有一个特殊点需要注意,在MibSPI模式下,DMA与TG的Buffer之间的数据传输不是一个一个传输的,而且一块一块传输的。比如,你用DMAxCOUNT 来做DMA 计数并假设DMA长度为1024,再如果设置的TG的Buffer大小为64,那么DMA一次就可以传输64Words的数据到TG的Buffer中。当Buffer中的64个数据发送完成,会触发下一次DMA传输,又会有64个数据传输到TG的Buffer中,并开始发送。这其中的整个过程不需要软件去控制,都是自动完成的,直到1024个数据全部发送完。

    不知道上面的解释,对你理解MibSPI的TG及DMA是否有所帮助。

    Regards,

    Jay

     

     

     

  • Hi Jay,

    谢谢你耐心的回答,现在对有些情况的理解有些入门了,但是还有个问题麻烦一下。比如你上面所说DMA是块传输到TG中的,当TG完成后,再传一个块进去,那问题是,块传输到TG的buffer中,那么块数据是从哪来的(数据源地址在哪),数据在TG中接收后也应该是块传出去吧,那么目的地址在哪?没有寄存器可配置啊。

  • Hi yong,

    TMS470M系列的MCU没有DMA模块,所以不能使用DMA来用于MibSPI的TG与系统RAM之间的数据传输。

    这也是为什么在TRM上没有DMA一章的原因。

    TRM中MibSPI、SCI和LIN几个模块中的DMA部分没有删掉,由此对你造成误解,我们深表歉意。

    Regards,

    Jay