TI中文支持网
TI专业的中文技术问题搜集分享网站

3352芯片 SPI1应用于slave mode 的两个问题

    1. 我现在在用3352芯片的SPI1接口,使用SPI1的slave mode与另一个芯片进行通信。我在datasheet:

AM335x and AMIC110 Sitara™ Processors Technical Reference Manual 中的第九章,找到了关于spi0_sclk d0 d1的配置项(Table9-10. CONTROL_MODULE REGISTERS),但是没找到关于SPI1的配置项,请问这是怎么回事?是不是理解为SPI1不能进行“multiplexed with pins of other peripherals in the SoC“?

另外,在mcspiFlash.c的例程中,main函数中有相关的设置,那么我如果用SPI1,是不是就没有这个设置了?

int main(void)
{
    volatile unsigned int count = 0x0FFFu;
    unsigned int retVal = FALSE;
    unsigned char choice = 0;

    /* Enable the clocks for McSPI0 module.*/
    McSPI0ModuleClkConfig();

    /* Perform Pin-Muxing for SPI0 Instance */
    McSPIPinMuxSetup(0);//这里进行了设置

    /* Perform Pin-Muxing for CS0 of SPI0 Instance */
    McSPI0CSPinMuxSetup(chNum);

    /* Initialize the UART utility functions */
    UARTStdioInit();

    UARTPuts("Here the McSPI controller on the SoC communicates with", -1);
    UARTPuts(" the SPI Flash.\r\n\r\n", -1);

    /* Enable IRQ in CPSR.*/
    IntMasterIRQEnable();

   2.能否提供一下SPI1 slave mode的初始化流程?

yongqing wang:

am335x有个McSPI driver,你可以参考这个看看

yongqing wang:

回复 yongqing wang:

官方教程:processors.wiki.ti.com/…/AM335x_McSPI_Driver's_Guide

user493907583:

回复 yongqing wang:

问题1帮忙再确认下,我在datasheet中找不到关于conf_spi1_sclk d0 d1 cs0 cs1的配置寄存器,只有0的,请问这是怎么回事?

Nancy Wang:

user493907583

能否提供一下SPI1 slave mode的初始化流程?

pdk\packages\MyExampleProjects\MCSPI_SlaveMode_SlaveExample_icev2AM335x_armExampleProject 有slave的例程,是基于RTOS的。

user493907583:

回复 Nancy Wang:

再问一下,我看到starterware中例程的McSPIPinMuxSetup函数,里面关于pinmux的配置,如下:

HWREG(SOC_CONTROL_REGS + CONTROL_CONF_SPI0_SCLK) =                     (CONTROL_CONF_SPI0_SCLK_CONF_SPI0_SCLK_PUTYPESEL |                      CONTROL_CONF_SPI0_SCLK_CONF_SPI0_SCLK_RXACTIVE);                HWREG(SOC_CONTROL_REGS + CONTROL_CONF_SPI0_D0) =                     (CONTROL_CONF_SPI0_SCLK_CONF_SPI0_SCLK_PUTYPESEL |                      CONTROL_CONF_SPI0_SCLK_CONF_SPI0_SCLK_RXACTIVE);                HWREG(SOC_CONTROL_REGS + CONTROL_CONF_SPI0_D1) =                     (CONTROL_CONF_SPI0_SCLK_CONF_SPI0_SCLK_PUTYPESEL |                      CONTROL_CONF_SPI0_SCLK_CONF_SPI0_SCLK_RXACTIVE);

请问,如果我把SPI0_D1设置成输出,那么这里也要

HWREG(SOC_CONTROL_REGS + CONTROL_CONF_SPI0_D1) =                     (CONTROL_CONF_SPI0_SCLK_CONF_SPI0_SCLK_PUTYPESEL |                      CONTROL_CONF_SPI0_SCLK_CONF_SPI0_SCLK_RXACTIVE); ?也需要把对应位设置成输入使能吗?还是一旦配置 MCSPI_CH0CONF寄存器的 IS DPE1 DPE0,那么pinmux的rxactive就失效了?

yongqing wang:

回复 user493907583:

rxactive这个都是根据你配置出的接口特性来的

user493907583:

回复 Nancy Wang:

补充两个问题:

1.   我在表7-81中看到  McSPI 对于Slave mode 的说明,

其中SPI_CLK在OPP100的情况下,速率只有16MHz,请问我看的这个是slave mode的最大速率吗?

2.  另外,当我的clk提升到12.5MHz时,我在波形上看到clk(黄色)的上升、下降边沿变缓,此时接收到的数据已经出现错误(示波器和master收到的一致,都是错误的):

我在相应的gpio进行了如下配置:

{CONTROL_CONF_MCASP0_AXR0, (PIN_FUNC_3|PIN_PULLUP_SELECT|PIN_RX_ACTIVE)}, /*SPI1_D1*/ {CONTROL_CONF_MCASP0_FSX, (PIN_FUNC_3|PIN_PULLUP_SELECT|PIN_RX_ACTIVE)}, /*SPI1_D0*/ {CONTROL_CONF_MCASP0_ACLKX, (PIN_FUNC_3|PIN_PULLUP_SELECT|PIN_RX_ACTIVE)}, /*SPI1_CLK*/ {CONTROL_CONF_MCASP0_AHCLKR, (PIN_FUNC_3|PIN_PULLUP_SELECT|PIN_RX_ACTIVE)} /*SPI1_CS0*/

请问,这个clk的配置是否还有其他寄存器我没有注意到呢?是否还有其他寄存器会影响clk 输入的电容值,导致边沿变缓,在clk线上,我只有一个5.1K的上拉电阻。

user493907583:

回复 user493907583:

补充一张图,在上面问题2的配置下,初始化后的mcasp0_aclkx的寄存器内容如下图,这个slewctrl,设置的是0,也就是fast,这里有影响吗?

user493907583:

回复 user493907583:

关于上面问题的进一步跟进:我尝试在12.5MHz的频率下发送数据,发现一个有意思的规律,即我所发送的数据,都是双倍出去的,例如我发送一字节  AA,那么实际在线路上的会是:AA AA,这个现象在低速5MHz的clk下面,是没有的。

下图(黄色是clk,蓝色是我发送的,slave mode):

所以我怀疑我提出的这个问题,不是clk导致,而是发送的数据发的太慢了,也就是发送完成后,这个数据还滞留了一段时间。

请帮我分析下:谢谢。

赞(0)
未经允许不得转载:TI中文支持网 » 3352芯片 SPI1应用于slave mode 的两个问题
分享到: 更多 (0)