调试 QSPI 驱动
从开篇提到的 GitHub 仓库中获取相关的驱动代码。
第一步, 将 External-Loaders\ QSPI testing 目录 mian_test.c 中的代码添加到工程中对应的 main.c 文件中。
/* USER CODE BEGIN 0 */
#include <string.h>
#define SECTORS_COUNT 100
/* USER CODE END 0 */
/* USER CODE BEGIN 2 */
uint8_t buffer_test[MEMORY_SECTOR_SIZE];
uint32_t var = 0;
CSP_QUADSPI_Init();
for (var = 0; var < MEMORY_SECTOR_SIZE; var++) {
buffer_test[var] = (var & 0xff);
}
for (var = 0; var < SECTORS_COUNT; var++) {
if (CSP_QSPI_EraseSector(var * MEMORY_SECTOR_SIZE,
(var + 1) * MEMORY_SECTOR_SIZE - 1) != HAL_OK) {
while (1)
; //breakpoint - error detected
}
if (CSP_QSPI_WriteMemory(buffer_test, var * MEMORY_SECTOR_SIZE,
sizeof(buffer_test)) != HAL_OK) {
while (1)
; //breakpoint - error detected
}
}
if (CSP_QSPI_EnableMemoryMappedMode() != HAL_OK) {
while (1)
; //breakpoint - error detected
}
for (var = 0; var < SECTORS_COUNT; var++) {
if (memcmp(buffer_test,
(uint8_t*) (0x90000000 + var * MEMORY_SECTOR_SIZE),
MEMORY_SECTOR_SIZE) != HAL_OK) {
while (1)
; //breakpoint - error detected - otherwise QSPI works properly
}
}
/* USER CODE END 2 */
注意添加代码时保留 USER CODE BEGIN x 和 USER CODE END x 标签,否则添加的代码会在 Cube MX 重新生成代码时被
覆盖掉。
第二步, 将\External-Loaders\QSPI Drivers\IS25LP128F 目录下的 QSPI 的 HAL 驱动文件替换工程中对应的文件。
第三步, 打开 CubeMX,重新生成工程。因为为了适配所有系列的 QSPI 接口, GitHub 所提供 QSPI 的 HAL 驱动中,没有提
供相应的 QSPI 外设配置函数,需要通过 CubeMX 来生成。
第四步, 如上图所示由于每个型号的 FLASH 的控制指令略有差别,所以在此步需要根据自己选用的 QPSI FLASH 器件进行
调整。同时需要进行调试 QSPI 的读写是否正常。如果 QSPIF lash 读写不正常,那么在下图中标注的位置添加断点,就可以
排查是哪一个环节出错,进一步对驱动进行调整。
|