大家好,我正在尝试用 Winbond 写入 W25Q128JV 闪存并从中读取。 我现在有一个简单的代码,该代码应该启用写入操作并读回状态寄存器1的值,状态寄存器1在位-1上具有写入启用状态。 尽管写入启用状态的预期值为0x02,但读取上的所有0仍是如此。 如果我不能确定是我的写作还是阅读有问题,我将非常感谢您的帮助。
下面是我的代码:
//Disable the SSI module to change the settings for Memory communication.
SSIDisable(SSI3_BASE);
//make sure the polarity and phase configuration is correct for Memory communication
SSIConfigSetExpClk(SSI3_BASE, ui32SysClock, SSI_FRF_MOTO_MODE_3, SSI_MODE_MASTER, 2000000 , 8);
//Enable the SSI module after settings change.
SSIEnable(SSI3_BASE);
GPIOPinWrite(PQ_SPI_PORT, PQ1_SPI_SS_MEMORY_PIN, 0x0);
//Send the data over SPI.
SSIDataPut(SSI3_BASE, 0x06 );
while(SSIBusy(SSI3_BASE)){
}
//Turn SS pin high to finish write enable.
GPIOPinWrite(PQ_SPI_PORT, PQ1_SPI_SS_MEMORY_PIN, PQ1_SPI_SS_MEMORY_PIN);
GPIOPinWrite(PQ_SPI_PORT, PQ1_SPI_SS_MEMORY_PIN, 0x0);
//Send the data over SPI.
SSIDataPut(SSI3_BASE, 0x05 );
SSIDataGet(SSI3_BASE, (uint32_t *) &Laser.Miscellaneous.Monitor.TECSupplyVoltage);
while(SSIBusy(SSI3_BASE)){
}
GPIOPinWrite(PQ_SPI_PORT, PQ1_SPI_SS_MEMORY_PIN, PQ1_SPI_SS_MEMORY_PIN);
下面是我的 SPI 初始化代码:
uint32_t ui32SysClock = SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ |
SYSCTL_OSC_MAIN |
SYSCTL_USE_PLL |
SYSCTL_CFG_VCO_240), 50000000);
//enable the pins used for SPI communication.
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOQ);
while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOQ)){
}
//
// Configure the SS pin and communication pins as GPIO output pins.
//
GPIOPinTypeGPIOOutput(PQ_SPI_PORT, (PQ3_SPI_RX_PIN |
PQ1_SPI_SS_MEMORY_PIN |
PQ4_SPI_SS_DIGIPOT_PIN |
PQ5_SPI_SS_DAC_PIN));
//drive the clear pin high.
GPIOPinWrite(PQ_SPI_PORT, PQ3_SPI_RX_PIN, PQ3_SPI_RX_PIN);
//
// Enable the SSI3 peripheral
//
SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI3);
while(!SysCtlPeripheralReady(SYSCTL_PERIPH_SSI3)){
}
GPIOPinConfigure(GPIO_PQ0_SSI3CLK);
GPIOPinConfigure(GPIO_PQ2_SSI3XDAT0);
GPIOPinTypeSSI(PQ_SPI_PORT, ( PQ0_SPI_CLK_PIN |
PQ2_SPI_TX_PIN ));
//
// Configure the SSI.
//
SSIConfigSetExpClk(SSI3_BASE, ui32SysClock, SSI_FRF_MOTO_MODE_3, SSI_MODE_MASTER, 2000000 , 12);
//
//Enable the SSI module
//
SSIEnable(SSI3_BASE);
//Set the SS pins to high to disable communication.
GPIOPinWrite(PQ_SPI_PORT, PQ1_SPI_SS_MEMORY_PIN, PQ1_SPI_SS_MEMORY_PIN);
GPIOPinWrite(PQ_SPI_PORT, PQ4_SPI_SS_DIGIPOT_PIN, PQ4_SPI_SS_DIGIPOT_PIN);
GPIOPinWrite(PQ_SPI_PORT, PQ5_SPI_SS_DAC_PIN, PQ5_SPI_SS_DAC_PIN);
SSIIntEnable(SSI3_BASE, SSI_TXFF);
以下是数据表中的启用写入和读取状态寄存器1说明:


据我所知,此设备应该可以与模式0 或模式3 SPI 通信配合使用,我已经尝试了这两种方式。
