xilinxqspi-flash 驱动分析(VxWorks版本)
控制器在三种运营模式:I/O模式,线性寻址模式,传统SPI模式。
1 线性地址模式
只可从Qspi Flash中读数。在配置QSPI BOOT时,BOOT ROM工作在线性地址模式
而线性地址模式则使用一组器件操作来减小软件从 Flash 中读取数据的开销。
2 I/O模式
软件需要将 Flash 命令和数据写到控制器中的 TXD寄存器中,然后将接收到的数据从 RXD 寄存器中读出。
1 流程:
sysHwInit
qspiFlashInit1 设置线性模式
sysHwInit2
qspiFlashInit2 设置互斥信号量
2 API
STATUS qspiFlashChipErase ()
STATUS qspiFlashSectorErase (int addr)
STATUS qspiFlashPageWrite (int addr, char *buf, int len)
STATUS qspiFlashRead (int addr, char *buf, int len)
STATUS sysFlashSet (char *string, int byteLen,int offset)
3 API 解析:
sysFlashSet
qspiFlashSetTwoSector
qspiFlashSetOneSector
qspiFlashRead //查看是否和要写的一样,相同则返回OK
qspiFlashSectorErase
qspiFlashPageWrite
qspiFlashRead
memcpy //拷贝0xfc000000+addr的数据到buf
qspiFlashPageWrite
qspiFlashModeSet (IO_MODE);
qspiFlashWaitNonWip //确定是否在wip状态
qspiFlashSetWriteEnable
发送QSPI_FLASH_CMD_PP命令 //发送地址+命令
QSPI_ENABLE_CS
QSPI_REG_WRITE_32 (ZYNQ_QSPI_TXD, pu32Buf[index / 4]); //写入数据
QSPI_DISABLE_CS
qspiFlashModeSet (LINEAR_MODE);
qspiFlashChipErase
qspiFlashModeSet (IO_MODE);
qspiFlashWaitNonWip
qspiFlashSetWriteEnable
QSPI_REG_WRITE_32 (ZYNQ_QSPI_TXD1, QSPI_FLASH_CMD_BE);