痞子衡嵌入式:其实i.MXRT下改造FlexSPI driver同样支持AHB方式去写入NOR Flash (3)

  但这里有一些限制,经实测,利用 memcpy 做 AHB 写,一次仅能写入 1/2/3/4/8 这五种有效长度的数据,其他数据长度不及预期(比如拷贝 5 - 7 字节,实际仅写入前 4 字节;拷贝 8 字节以上,实际仅写入前 8 字节),这其实跟 《i.MXRT中FlexSPI外设对AHB Burst Read特性的支持》 一文里提及的处理器 AHB Burst 策略有关,FlexSPI 每次仅会缓存一次 AHB Burst 写数据进 AHB TX Buffer,而 SEQ_CTL 每工作一次都会使能一次 Flash 器件的数据处理流程(进入 Busy 状态),因此连续的两次 AHB burst 写,后面一次的 burst 行为其实不产生实际 Flash 写入效果。

flexspi_device_config_t deviceconfig = { // ... 其他省略 .AWRSeqIndex = NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD, .AWRSeqNumber = 1, }; void flexspi_nor_flash_program(FLEXSPI_Type *base, uint32_t dstAddr, const uint32_t *src, uint32_t size) { while (size) { // Write Enable 子时序 flexspi_nor_write_enable(base, 0); uint32_t cpyBytes = 0; if (size >= 8) { cpyBytes = 8; } else if (size >= 4) { cpyBytes = 4; } else { cpyBytes = size; } memcpy((void *)dstAddr, (void *)src, cpyBytes); __DSB(); // Read Status 子时序 flexspi_nor_wait_bus_busy(base); dstAddr += cpyBytes; src += cpyBytes / 4; size -= cpyBytes; } FLEXSPI_SoftwareReset(base); }

  上面看似鸡肋的 AHB 方式写入 Flash 到底有什么用?底下痞子衡会讲到 XECC 模块,到时你就知道其用处了。

  至此,i.MXRT下改造FlexSPI driver以AHB方式去写入NOR Flash痞子衡便介绍完毕了,掌声在哪里~~~

欢迎订阅

文章会同时发布到我的 博客园主页、CSDN主页、知乎主页、微信公众号 平台上。

微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

痞子衡嵌入式:其实i.MXRT下改造FlexSPI driver同样支持AHB方式去写入NOR Flash

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwspwp.html