大家好,我正在尝试用 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 通信配合使用,我已经尝试了这两种方式。