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.

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

Other Parts Discussed in Thread: AMIC110

    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的初始化流程?

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

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

  • spi1的相关引脚需要做pinmux。看datasheet table4-2
    www.ti.com/.../pinmuxtool
  • user493907583 说:

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

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

  • 再问一下,我看到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就失效了?

  • rxactive这个都是根据你配置出的接口特性来的
  • 补充两个问题:

    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的上拉电阻。

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

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

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

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

    请帮我分析下:谢谢。