由于刚接触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)。
TI中文支持网





