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

AM335X SPI异常

由于刚接触AM335X,在测试官方提供的Demo示例mcspiFlash时,发现读出来的永远是0xFF,不知道问题在哪里。原理图上也是SPI0,管角全是SPI0的默认管角功能,希望能够给予帮助,谢谢。

主函数部分:/* Enable the clocks for McSPI0 module.*/McSPI0ModuleClkConfig();/* Perform Pin-Muxing for SPI0 Instance */McSPIPinMuxSetup(0);/* Perform Pin-Muxing for CS0 of SPI0 Instance */McSPI0CSPinMuxSetup(0);/* 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();/* Map McSPI Interrupts to AINTC */McSPI0AintcConfigure();/* Do the necessary set up configurations for McSPI.*/McSPISetUp();



unsigned int McSPIPinMuxSetup(unsigned int instanceNum)
{unsigned int profile = 2;unsigned int status = FALSE;switch (profile){case 2: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);status = TRUE;break;default:break;}return status;
}




unsigned int McSPI0CSPinMuxSetup(unsigned int csPinNum)
{unsigned int profile = 2;switch (profile){case 2:HWREG(SOC_CONTROL_REGS + CONTROL_CONF_SPI0_CS0) =(CONTROL_CONF_SPI0_SCLK_CONF_SPI0_SCLK_PUTYPESEL |CONTROL_CONF_SPI0_SCLK_CONF_SPI0_SCLK_RXACTIVE);return TRUE;default:break;}return FALSE;
}
Steven Liu1:

你是在自己的板子上进行的测试,还是在官方的GPEVM板上进行的测试?如果是自己的板子,一定要注意核查EEPROM的逻辑辨别这里。

另外,可以直接通过读取寄存器的值,来确认你的pinmux之类的设置是否真正的生效了,没有生效的话,说明还是在前面的逻辑处理中有问题。

Yaoming Qin:

您用的是starterware吗?跑在哪个板子上?

afsa af a:

回复 Steven Liu1:

谢谢你的回复。

1)我使用的是自己的板子进行测试的,我能够确认的是当有数据发送时,SPIEN都能够被拉低。

2)我直接发送读它的ID命令,但是读出来的全是0.

afsa af a:

回复 Yaoming Qin:

谢谢你的回复。

我是在自己的板子上跑的。我直接发送读ID命令,能够确认SPIEN能够被拉低,但是收到的全是0。

Steven Liu1:

回复 afsa af a:

pinmux中的模式设置是否正确?receive enable是否有打开?

afsa af a:

回复 Steven Liu1:

 谢谢你的回复。管脚接的是默认管脚,配制采用的是Demo中的示例。

unsigned int McSPIPinMuxSetup(unsigned int instanceNum)
{unsigned int profile = 2;unsigned int status = FALSE;if (0 != instanceNum){return FALSE;}//profile = EVMProfileGet();switch (profile){case 2:HWREG(SOC_CONTROL_REGS + CONTROL_CONF_SPI0_SCLK) =(CONTROL_CONF_SPI0_SCLK_CONF_SPI0_SCLK_PUTYPESEL |CONTROL_CONF_SPI0_SCLK_CONF_SPI0_SCLK_RXACTIVE);//!< 管脚默认功能(输入/输出) SPIO_CLK A17HWREG(SOC_CONTROL_REGS + CONTROL_CONF_SPI0_D0) =(CONTROL_CONF_SPI0_SCLK_CONF_SPI0_SCLK_PUTYPESEL |CONTROL_CONF_SPI0_SCLK_CONF_SPI0_SCLK_RXACTIVE);//!< 管脚默认功能SPI0_D0B17HWREG(SOC_CONTROL_REGS + CONTROL_CONF_SPI0_D1) =//!< 管脚默认功能SPI0_D1B16(CONTROL_CONF_SPI0_SCLK_CONF_SPI0_SCLK_PUTYPESEL|CONTROL_CONF_SPI0_SCLK_CONF_SPI0_SCLK_RXACTIVE);status = TRUE;break;default:break;}return status;
}
unsigned int McSPI0CSPinMuxSetup(unsigned int csPinNum)
{unsigned int profile = 2;if (0 != csPinNum){return FALSE;}//profile = EVMProfileGet();switch (profile){case 2:HWREG(SOC_CONTROL_REGS + CONTROL_CONF_SPI0_CS0) =//!< 管脚默认功能 SPI0_CS0A16(CONTROL_CONF_SPI0_SCLK_CONF_SPI0_SCLK_PUTYPESEL |CONTROL_CONF_SPI0_SCLK_CONF_SPI0_SCLK_RXACTIVE);return TRUE;default:break;}return FALSE;
}

接收使用打开了,不管发送什么命令,收到的全是FF。

afsa af a:

回复 Steven Liu1:

谢谢你的回复。关于这个示例,我必须将D0\D1管脚方向做如下修改后,SPID0才有输出,但是SPID1管脚一直没有输入,其它的信号都有。

static void McSPISetUp(void)
{/* Reset the McSPI instance.*/McSPIReset(SOC_SPI_0_REGS);/* Enable chip select pin.*/McSPICSEnable(SOC_SPI_0_REGS);/* Enable master mode of operation.*/McSPIMasterModeEnable(SOC_SPI_0_REGS);/* Perform the necessary configuration for master mode.*/McSPIMasterModeConfig(SOC_SPI_0_REGS, MCSPI_SINGLE_CH,MCSPI_TX_RX_MODE, MCSPI_DATA_LINE_COMM_MODE_6,//MCSPI_DATA_LINE_COMM_MODE_1chNum);/* Configure the McSPI bus clock depending on clock mode. */McSPIClkConfig(SOC_SPI_0_REGS, MCSPI_IN_CLK, MCSPI_OUT_FREQ, chNum,MCSPI_CLK_MODE_0); //MCSPI_CLK_MODE_0/* Configure the word length.*/McSPIWordLengthSet(SOC_SPI_0_REGS, MCSPI_WORD_LENGTH(8), chNum);/* Set polarity of SPIEN to low.*/McSPICSPolarityConfig(SOC_SPI_0_REGS, MCSPI_CS_POL_LOW, chNum);/* Enable the transmitter FIFO of McSPI peripheral.*/McSPITxFIFOConfig(SOC_SPI_0_REGS, MCSPI_TX_FIFO_ENABLE, chNum);/* Enable the receiver FIFO of McSPI peripheral.*/McSPIRxFIFOConfig(SOC_SPI_0_REGS, MCSPI_RX_FIFO_ENABLE, chNum);
}

afsa af a:

回复 Yaoming Qin:

谢谢你的回复。关于官网提供的SPI_FLASH示例,我必须做如下修改,SPID0才会有输出,而SPID1就是没有输入,其它的信号都有。

static void McSPISetUp(void){
.../* Perform the necessary configuration for master mode.*/McSPIMasterModeConfig(SOC_SPI_0_REGS, MCSPI_SINGLE_CH,MCSPI_TX_RX_MODE, MCSPI_DATA_LINE_COMM_MODE_6,//MCSPI_DATA_LINE_COMM_MODE_1chNum);
...
}

我发的是9F命令,读取ID,但是SPID1信号一直是高电平(FF)。

赞(0)
未经允许不得转载:TI中文支持网 » AM335X SPI异常
分享到: 更多 (0)