您好! 通过 I2C 解决 EEPROM 连接问题后、我将尝试通过 SPI 与串行闪存进行通信。 我有 一个来自 driverlib (SPI_master)的示例、并在我的板上对其进行了测试。 当我将 MISO 和 MOSI 连接在一起(回送)时、它工作正常。 为了使用 SPI 闪存 sst26vf064ba、我尝试转换此示例 、但未成功。 我在示波器上看到除 MISO 之外的所有需要的信号(CS、CLK、MOSI)、并在读取时获取0xFF 或0x0。 以下是我的代码:
//
//将时钟设置为直接从外部晶振/振荡器运行。
//(无外部32k osc、无内部 osc)
//
SysCtrlClockSet (false、false、SYS_CTRL_SYSDIV_32MHz);
//
将 IO 时钟设置为与系统时钟相同
//
SysCtrlIOClockSet (SYS_CTRL_SYSDIV_32MHz);
//
必须启用 SSI0外设使用。
//
SysCtrlPeripheralEnable (SYS_CTRL_Periph_SSI0);
//
配置模块前禁用 SSI 功能
//
SSIDisable (SSI0_BASE);
//
将 IO 时钟设置为 SSI 时钟源
//
SSIClockSourceSet (SSI0_BASE、SSI_Cock_PIOSC);
IOCPinConfigPeriphOutput (GPIO_SSI0_BASE、PIN_SCLK0、
IOC_MUX_OUT_SEL_SSI0_CLKOUT);
IOCPinConfigPeriphOutput (GPIO_SSI0_BASE、PIN_CS0、
IOC_MUX_OUT_SEL_SSI0_FSSOUT);
IOCPinConfigPeriphOutput (GPIO_SSI0_BASE、PIN_MOSI0、
IOC_MUX_OUT_SEL_SSI0_TXD);
IOCPinConfigPeriphInput (GPIO_SSI0_BASE、PIN_MISO0、
IOC_SSIRXD_SSI0);
GPIOPinTypeSSI (GPIO_SSI0_BASE、PIN_SCLK0 |
PIN_CS0 | PIN_MISO0 |
PIN_MOSI0);
//
//将 SSI 模块配置为 Motorola/Freescale SPI 模式3:
//极性= 1,SCK 稳定状态为高
//相位 = 1、数据在第一个时钟沿发生变化并在第二个时钟边沿发生捕捉
//字大小= 8位
//
SSIConfigSetExpClk (SSI0_BASE、SysCtrlIOClockGet ()、SSI_FRF_MOTO_MOTO_MODE 0、
SSI_MODE_MASTER、SysCtrlClockGet ()/2、8);
//
//启用 SSI0模块。
//
SSIEnable (SSI0_BASE);
//
//从 SSI 端口读取任何残留数据。 这样可确保接收
// FIFO 为空,因此我们不会读取任何不需要的垃圾。 这是在这里完成
//因为 SPI SSI 模式是全双工的,允许您
同时发送和//接收。 SSIDataGetNonBlocking 函数在
返回数据时返回//"true"、在未返回数据时返回"false"。
//“非阻塞”函数检查接收
FIFO 中是否有数据//如果没有数据,则不会“挂起”。
//
uint32_t data =0x0;
while (SSIDataGetNonBlocking (SSI0_BASE、&data)
){
}
int i=0;
while (1)
{
/*SSIDataPut (SSI0_BASE、0x5);
while (SSIBusy (SSI0_BASE));*
while (!SSIDataPutNonBlocking (SSI0_BASE、I))
{
}
/*SSIDataGet (SSI0_BASE,&data);
while (SSIBusy (SSI0_BASE));*
while (SSIDataGetNonBlocking (SSI0_BASE、&data))
{
}
如果(数据!= 0xFF)
{
int a=0;
}
I =(i+1)&0xFFFFFF;
}
有人知道问题在哪里? 请提供一些建议。

