Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
QSPI
开发板评测
nuc980
NK-980IOT测评之QSPI
发布于 2022-03-28 00:11:42 浏览:1402
订阅该版
[tocm] ## 开发环境简介 ![IMG_20220326_205404.jpg](https://oss-club.rt-thread.org/uploads/20220327/e82c1348233c6dc1a133571e53382f8f.jpg.webp) - NK-980IOT V1.0 (NUC980DK61Y) - RT-Thread Studio + J-Link + VCOM - U-Boot from SPI-NAND and rtthread running in DDR ## QSPI硬件介绍 ### 概述 >The Quad Serial Peripheral Interface (QSPI) applies to synchronous serial data communication and allows full duplex transfer. Devices communicate in Master/Slave mode with the 4-wire bi-direction interface. The chip contains one QSPI controller performing a serial-to-parallel conversion on data received from a peripheral device, and a parallel-to-serial conversion on data transmitted to a peripheral device. > >The QSPI controller supports 2-bit Transfer mode to perform full-duplex 2-bit data transfer and also supports Dual and Quad I/O Transfer mode and the controller supports the PDMA function to access the data buffer. QSPI适用于同步串行数据通信,允许全双工传输。QSPI的设备使用4线双向接口以主/从模式进行通信。NUC980芯片包含一个QSPI控制器,对从外围设备接收的数据执行串行到并行转换,并对传输到外围设备的数据执行并行到串行转换。 QSPI控制器支持2位传输模式以执行全双工2位数据传输,还支持双I/O和四I/O传输模式,控制器支持PDMA功能以访问数据缓冲区。 ### 特性 >- Supports Master or Slave mode operation >- Master mode up to 100 MHz and Slave mode up to 30 MHz (when chip works at VDD = 2.7~3.6V) >- Supports 2-bit Transfer mode >- Supports Dual and Quad I/O Transfer mode >- Configurable bit length of a transaction word from 8 to 32-bit >- Provides separate 8-level depth transmit and receive FIFO buffers >- Supports MSB first or LSB first transfer sequence >- Supports Byte Reorder function >- Supports Byte or Word Suspend mode >- Supports PDMA transfer >- Supports 3-Wire, no slave selection signal, bi-direction interface >- Supports one data channel half-duplex transfer >- Supports receive-only mode ### 功能框图 ![image-20220327195654406.png](https://oss-club.rt-thread.org/uploads/20220327/da393ab694ad78f88a603f562abf9397.png.webp) ### 硬件电路 ![image-20220327195904041.png](https://oss-club.rt-thread.org/uploads/20220327/e9efc70439fd7e3b7b5ab428c86b83f1.png.webp) 由于开发板上的QSPI电路设计为复用形式,实际焊接芯片是一块NAND FLASH,型号为W25N01GVZE1G,因此关注上图绿框框内的部分即可。 ## QSPI使用说明 1. 创建工程 使用RT-Thread Studio基于开发板傻瓜式创建项目,调试方式选择J-Link + JTAG: ![image-20220327203600578.png](https://oss-club.rt-thread.org/uploads/20220327/56a2a696d5275ef356b6015cab78b50d.png.webp) 2. 修改RT-Thread Settings 去除掉模板工程中多余的配置和组件,只保留必要功能和QSPI(qspi0)外设: ![image-20220327204304939.png](https://oss-club.rt-thread.org/uploads/20220327/45795ccbd26655a973040724196e9a0e.png.webp) 编译运行并查看已经注册到系统里的设备是否有`qspi0`和`qspi01`: ![image-20220327204823545.png](https://oss-club.rt-thread.org/uploads/20220327/a14ef5ad28d08bd0b0a441c292eafd10.png) 从绿色的LOG中也可以看到,spinand_flash设备已经挂载到系统中了。 3. 代码简述 - 底层浅析(以发送一个字节为例) QSPI数据传输的核心函数是位于`drv_qspi.c`设备驱动中的`nu_qspi_bus_xfer`,在该函数中会配置QSPI传输时的一些参数,然后调用`nu_spi_transfer`→`nu_spi_transmission_with_poll`(非DMA模式)→`nu_spi_write/nu_spi_read`函数来操作底层寄存器: ![image-20220327220608581.png](https://oss-club.rt-thread.org/uploads/20220327/3c2c7c713e323003c3078d25da19380e.png.webp) 再来翻一下手册: ![image-20220327221134575.png](https://oss-club.rt-thread.org/uploads/20220327/a3314438fc52aedc66e655cd1fc56259.png.webp) 又对上了,开心(*^▽^*) - 功能演示 ![image-20220327222314510.png](https://oss-club.rt-thread.org/uploads/20220327/3ba5d331f9d8fec61cecd8ef33f3210b.png) 如上图,rtthread和新唐分别提供了不同的MSH API用来访问QSPI NAND FLASH,简单演示一下: - nlist - 列出nand flash的所有分区信息: ![image-20220327222610178.png](https://oss-club.rt-thread.org/uploads/20220327/2fe52fa55000fe98bab9335a9a6d25f6.png) - nid - 查看nand flash的ID ![image-20220327222756093.png](https://oss-club.rt-thread.org/uploads/20220327/6237ace6fece1aab202485199c7b6684.png) 和上电时识别到的一样。 - mtd_nand read nand0 1 1 - 读nand0分区中block1, page1的数据: ![image-20220327223152264.png](https://oss-club.rt-thread.org/uploads/20220327/e0e7d698f532f6a4749554950cfc8109.png) 从截取片段可以看出来,由于NAND FLASH中烧录了引导用的U-Boot,所以读出来的一些数据其实是位于U-Boot中的打印信息。 ## 代码链接 [Gitee](https://gitee.com/charlesxsong/nuc980.git) ## 心得体会 QSPI+NAND FLASH的驱动做得非常完善,直接调用一些API即可访问设备、读写数据。 然而稍有不便的地方在于,RT-Thread Studio + J-LINK调试时只能使用U-BOOT引导在DDR里运行,并且单步debug时的跳转不是那么好用,跳来跳去容易误导人。
3
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
CharlesX
Make science fiction science
文章
4
回答
33
被采纳
8
关注TA
发私信
相关文章
1
stm32外接QSPI-Flash运行程序,还能用FAL进行分区,读,写操作吗?
2
使用sfud擦除w25q64部分区域失败
3
qspi flash部分sector擦除问题
4
超出ROM范围,怎么使用外部CODE FLASH
5
关于H743的bootloader的问题
6
STM32H750下载代码至QSPI FLASH后初始化失败
7
QSPI FLASH W25Q64,在进入映射模式后,如何退出?
8
使用sf bench yes 后 读qspi的flash出错
9
STM32H7使用QSPI的DMA时drv_qspi.c报错
10
w25q256jv 写使能失败,qspi模式下
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
YZRD
2
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部