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导致,而是发送的数据发的太慢了,也就是发送完成后,这个数据还滞留了一段时间。
请帮我分析下:谢谢。