STM32H743使用QSPI驱动W25Q128JV芯片(正点原子例程修改)
当前项目中需要使用到STM32H743和外部SPI FLASH,在评估过程中使用的是正点原子的阿波罗开发板
但是好巧不巧的画原理图和制板的同事在选型的时候虽说保留了QSPI相同的借口,但是芯片改选了W25Q128,(可能是为了成本考虑),但是在实际调试过程中遇到了问题
仍旧使用原子哥的例程,但是写入数据后再读取会出现丢前3字节的情况。上网查了相关资料,发现W25Q256的4字节地址,128是3字节地址,则在w25qxx.c作了如下修改:
//QPI,写扇区擦除指令,地址为0,无数据_24位地址_4线传输地址_4线传输指令,无空周期,0个字节数据
QSPI_Send_CMD(W25X_SectorErase,Dst_Addr,0,QSPI_INSTRUCTION_4_LINES,QSPI_ADDRESS_4_LINES,QSPI_ADDRESS_24_BITS,QSPI_DATA_NONE);//QPI,页写指令,地址为WriteAddr,4线传输数据_24位地址_4线传输地址_4线传输指令,无空周期,NumByteToWrite个数据
QSPI_Send_CMD(W25X_QuadPageProgram,WriteAddr,0,QSPI_INSTRUCTION_4_LINES,QSPI_ADDRESS_4_LINES,QSPI_ADDRESS_24_BITS,QSPI_DATA_4_LINES); //QPI,快速读数据,地址为ReadAddr,4线传输数据_24位地址_4线传输地址_4线传输指令,8空周期,NumByteToRead个数据
QSPI_Send_CMD(W25X_FastReadQual,ReadAddr,8,QSPI_INSTRUCTION_4_LINES,QSPI_ADDRESS_4_LINES,QSPI_ADDRESS_24_BITS,QSPI_DATA_4_LINES); //SPI,读id,地址为0,单线传输数据_24位地址_单线传输地址_单线传输指令,无空周期,2个字节数据
QSPI_Send_CMD(W25X_ManufactDeviceID,0,0,QSPI_INSTRUCTION_1_LINE,QSPI_ADDRESS_1_LINE,QSPI_ADDRESS_24_BITS,QSPI_DATA_1_LINE);
在所有需要配置地址长度的位置都要将 QSPI_ADDRESS_32_BITS -> QSPI_ADDRESS_24_BITS 。
但是还是无法正常工作,于是开始仔细看手册,这个地方我由于自己的疏忽,看错了手册,W25Q128FV和W25Q128JV的手册完全不同,
FV的手册内的指令与256有些相似,例如写入(Page Program (02h))指令,如下:
![](/assets/blank.gif)
![](/assets/blank.gif)
W25Q128FV和W25Q256有两种写入模式,均可以通过02h这条指令发送,1线和4线模式均可使用。
而W25Q128JV与他们的区别就是它的02h指令,仅支持1线模式,而如果想使用4线模式,需要使用Quad Input Page Program (32h)指令,时序图如下:
在时序图中可以看出来,就算是4线模式写入指令,指令和地址也都是单线发送,与W25Q128FV和W25Q256有区别,所以要修改程序:
//QPI,快速读数据,地址为ReadAddr,4线传输数据_24位地址_1线传输地址_1线传输指令,8空周期,NumByteToRead个数据
QSPI_Send_CMD(W25X_FastReadQual,ReadAddr,8,QSPI_INSTRUCTION_1_LINE,QSPI_ADDRESS_1_LINE,QSPI_ADDRESS_24_BITS,QSPI_DATA_4_LINES); //QPI,页写指令,地址为WriteAddr,4线传输数据_24位地址_1线传输地址_1线传输指令,无空周期,NumByteToWrite个数据
QSPI_Send_CMD(W25X_QuadPageProgram,WriteAddr,0,QSPI_INSTRUCTION_1_LINE,QSPI_ADDRESS_1_LINE,QSPI_ADDRESS_24_BITS,QSPI_DATA_4_LINES);
所有相关的指令都要一一对着手册改好。
//读取W25QXX的状态寄存器,W25QXX一共有3个状态寄存器
u8 W25QXX_ReadSR(u8 regno)
{ u8 byte=0,command=0; switch(regno){case 1:command=W25X_ReadStatusReg1; //读状态寄存器1指令break;case 2:command=W25X_ReadStatusReg2; //读状态寄存器2指令break;case 3:command=W25X_ReadStatusReg3; //读状态寄存器3指令break;default:command=W25X_ReadStatusReg1; break;} QSPI_Send_CMD(command,0,0,QSPI_INSTRUCTION_1_LINE,QSPI_ADDRESS_NONE,QSPI_ADDRESS_8_BITS,QSPI_DATA_1_LINE); //SPI,写command指令,地址为0,单线传数据_8位地址_无地址_单线传输指令,无空周期,1个字节数据QSPI_Receive(&byte,1); return byte;
}
(这里并没有把所有需要修改的位置都列出来)
然后就没问题啦!!!!!
STM32H743使用QSPI驱动W25Q128JV芯片(正点原子例程修改)相关推荐
- STM32学习笔记——基于正点原子例程编码器模式小结
STM32学习笔记--基于正点原子例程编码器模式小结 最近一段时间学习了,STM32f4的编码器功能,经过自己探索和他人的热心帮助,对于编码器模式有了一定了解.STM32f4单片机提供编码器模式,以便 ...
- 正点原子linux串口驱动下载,「正点原子Linux连载」第六十三章Linux RS232/485/GPS驱动实验...
1)实验平台:正点原子Linux开发板 2)摘自<正点原子I.MX6U嵌入式Linux驱动开发指南>关注官方微信号公众号,获取更多资料:正点原子 第六十三章Linux RS232/485/ ...
- EEPROM(24C64)的IIC通讯调试记录要点,使正点原子例程兼容性更好
最近使用了一个24C64,直接力创SMT的,型号是ST的M24C64-RMN6TP,MCU使用的STM32F407ZGT6,直接用的正点原子的例程,然后把宏定义24C02改为24C64,结果发现通讯不 ...
- Linux platform 设备驱动实验-基于正点原子IMX6ULL开发板
我们以前的设备驱动都非常的简单,都是对IO进行最简单的读写操作.像I2C. SPI.LCD 这些复杂外设的驱动就不能这么去写了,Linux 系统要考虑到驱动的可重用性,因此提出了驱动的分离与分层这样的 ...
- Linux 设备树下的 platform 驱动实验基于正点原子IMX6ULL开发板
1 设备树下的 platform 驱动简介 platform 驱动框架分为总线.设备和驱动,其中总线不需要我们这些驱动程序员去管理,这个是 Linux 内核提供的,我们在编写驱动的时候只要关注于设备和 ...
- 正点原子linux串口驱动下载,【正点原子Linux连载】第二十一章UART串口通信实验-摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南 (amobbs.com 阿莫电子论坛)...
示例代码21.3.1 bsp_uart.h文件代码 1 #ifndef _BSP_UART_H 2 #define _BSP_UART_H 3 #include "imx6ul.h&q ...
- Linux MISC 驱动实验-基于正点原子IMX6ULL开发板
misc 的意思是混合.杂项的,因此 MISC 驱动也叫做杂项驱动,也就是当我们板子上的某些外设无法进行分类的时候就可以使用 MISC 驱动.MISC 驱动其实就是最简单的字符设备驱动,通常嵌套在 p ...
- 正点原子 例程学习记录 实验四 串口实验
断断续续地看了一阵子 ,一度被工程下无数的文件劝退,今又看了开发指南,发现其实没有编译的工程包含的文件并不多,绝大部分文件都是编译后才出现的.其中还有很多是系统文件,不需要自己写. 观察还没有编译过的 ...
- 正点原子gt9xx系列linux驱动移植
写这个博客的前景: 正点原子的RGB电容触摸屏触摸芯片系列: 4.3 寸屏 480x272分辨率 使用的触摸芯片是gt9xx系列 4.3寸屏 800x480分辨率 使用的触摸芯片是gt9xx系列 7 ...
最新文章
- java webpack web项目_spring + spring mvc + mybatis + react + reflux + webpack Web工程例子
- jQuery源码分析-each函数
- linux:su认证失败
- [FF-A]-01-Introduction
- YBTOJ:放置棋子(费用流)
- 基于jsf的项目_JSF基于事件的交流:新派方法
- Java求出1000内的完数
- 爬去图片插件_学不会你打我,一个插件爬取亚马逊数据!
- ThreadLocal原理、ThreadLocal内存泄漏
- SPSS均值过程分析教程
- 基于SSM的网上购物商城管理系统
- anki 神级插件 fastWQ 提取本地朗文音频
- Rplidar A1/A2使用及Hector_SLAM建图
- 互联网日报 | 美团外卖日订单量突破4000万个;《王者荣耀》动画番剧启动;360金融更名为360数科...
- mysql in数量限制_SQL语句中in的个数限制为1000
- 共阳极八段数码管 c语言显示,八段数码管的编码
- linux系统制作qcow2,centos7.6下qcow2镜像制作方法
- 计算机密码设置要求包括哪些内容,电脑开机密码设置方法有哪些
- Android——一个简单的记账本APP
- Oracle/PLSQL存储过程详解
热门文章
- RK3399 4G语音通话和短信功能
- 基于EasyNVR摄像机网页无插件直播服务二次开发实现H5播放页面的简单集成方案
- 大爷的 又被罚款100
- jquery js 设置 div 的内容,给 div 添加一个属性
- 日加满:践行企业责任 公益暖心之旅
- DE、SaDE、JADE、SHADE、L-SHADE算法整理
- 做好这三步,你的小程序离“爆款”就不远了
- 【python爬虫】懒加载(以站长素材为例)
- 如何删除映射网络驱动器
- linux安卓开发教程视频教程,陈超 FFMPEG跨平台iOSAndroidLinux高级开发实战视频教程...