我想让两个Am335x通过McSPI通信,所以就需要一块AM335X的McSPI工作在Slave模式下。现在Maste模式已经能正常工作了,在发送数据时能用示波器看到数据波形。但Slave模式不管我怎么配置都无法进入接收中断,我已经禁止了Slave模式下的IDLE模式。现在已经黔驴技穷了,不知道该怎么配置这个Slave模式了。在TI的资料上,无论是TRM还是StareWare都找不到McSPI的Slave模式的指导。求解。
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.
我想让两个Am335x通过McSPI通信,所以就需要一块AM335X的McSPI工作在Slave模式下。现在Maste模式已经能正常工作了,在发送数据时能用示波器看到数据波形。但Slave模式不管我怎么配置都无法进入接收中断,我已经禁止了Slave模式下的IDLE模式。现在已经黔驴技穷了,不知道该怎么配置这个Slave模式了。在TI的资料上,无论是TRM还是StareWare都找不到McSPI的Slave模式的指导。求解。
你好,这个slave的配置这块的流程在TRM(version H)的24.3.11节Programming Aid有讲述配置过程,你的master不是配置成功了吗?slave配置也是跟着同样的流程走,把相应的master配置改成slave,输出改输入就行了。我配成功过,实现的就是一个板子做master,一个板子做slave,两者通信,速率12M。
至于你说的没有进入接收中断,是不是已经用示波器量过了,master把数据已经送过来了,但就是没接收?
如果这样的话,就查slave 端的配置就好了:1. 测量clock,cs信号,以及数据信号,判断发送方一切正常;2.如果都正常,在slave侧 Pinmux的配置上面,是否把SPI_SCLK以及相应的data通道配置了receiver enable,可以通过control module相应寄存器进行检查;3.mcspi的配置上面,MCSPI_CH0CONF中18bit,IS的选择是否正确,12-13bit呢?这里面有很多可以检查的东西,通过CCS寄存器的读值,一一检查下,一定能找到原因。
等你做些测试了,再把反馈信息发上来,我们一起分析。
你好:
我检查了一下我的配置。应该没错。我把主和从连接起来后,再用示波器重新看了一下波形,发现当主发出的波形不见了。我想请教一下,你的两块板子是如何连接的。谢谢!
|
模式 |
主 |
从 |
|
引脚配置 |
SPIDAT[1] 发送 SOMI SPIDAT[0] 接收 SIMO IS=0, DPE1=0, DPE0=1 |
SPIDAT[1] 接收 MIS0 SPIDAT[0] 发送 MOSI IS=1, DPE1=1, DPE0=0 |
|
时钟相位和极性 |
POL=0,PHA=1,模式1,下降沿采样 |
POL=0,PHA=0,模式0,上升沿采样 |
|
收发模式 |
发送和接收 TRM=0 |
发送和接收 TRM=0 |
|
SPIEN |
使用SPIEN用于片选,低电平有效 PIN34 =0,EPOL=1 |
使用SPIEN用于片选,低电平有效 PIN34 =0,EPOL=1 |
|
是否配置为单通道模式 |
是 SINGLE=1 |
是 SINGLE=1 |
|
SPI字长 |
32位 WL=1fh |
32位 WL=1fh |
|
是否使用FIFO |
否 |
否 |
|
IDLE模式 |
无条件响应idle请求 SIDLEMODE=0 |
忽略idle请求 SIDLEMODE=1 |
|
中断使能 |
TX0_EMPTY_ ENABLE=1 RX0_FULL_ ENABLE=1 |
TX0_EMPTY_ ENABLE=1 RX0_FULL_ ENABLE=1 |