社区首页
技术讨论创新帖
全部新帖
资料区
社区活动
联系管理员
★ 社区积分制度
★ 新手必读
★ 申请版主★
请
登录
后使用快捷导航
没有帐号?
注册
首页
|
电子技术
|
嵌入式
模拟电子
单片机
电源管理
传感器
半导体
电子应用
|
工业控制
物联网
汽车电子
网络通信
医疗电子
手机便携
测试测量
安防电子
家用电子
机器人
新能源
电子头条
|
社区
|
论坛
测评
博客
大学堂
|
下载
|
下载中心
电路图
精品文集
电路图
|
参考设计
|
Datasheet
|
活动
|
直播
datasheet
datasheet
文章
搜索
登录
注册
论坛
切换旧版
电子工程世界-论坛
»
论坛
›
电子技术交流
›
国产芯片交流
›
【CW32L052测评】学习笔记04(SPI_Flashd读写)
返回列表
发新帖
回复
阅
747
|
回
1
qzc0927
当前离线
一粒金砂(高级)
最后登录
2024-11-21
在线时间
38 小时
威望
302分
芯积分
341分
(兑换)
E金币
0枚
(兑换)
(兑换)
好友
1
qzc0927
125
帖子
0
TA的资源
一粒金砂(高级)
+ 好友
私信
楼主
发表于2023-8-6 10:28
只看该作者
【CW32L052测评】学习笔记04(SPI_Flashd读写)
[复制链接]
## SPI-FLASH读写 ### 8.1:硬件设计 外部flash也是用户存储数据来用,使用的是SPI接口,首先先看评估板的用户手册上关于SPI接口的说明: ![image-20230806084940015](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20230806084940015.png) 再看主芯片的用户手册里面关于通讯时序的说明: ![image-20230806085254693](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20230806085254693.png) 以及寄存器相关描述: ![image-20230806085527595](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20230806085527595.png) 最后看下原理图的接口: ![image-20230806085631732](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20230806085631732.png) 从原理图可以看出,使用PC00,PC01,PC02,PC03作为SPI接口,后续软件设计需要,同时需要查看引脚对应的SPI接口序号,回到评估板的数据手册查看。 ![image-20230806091517518](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20230806091517518.png) 使用的是SPI1接口。 ### 8.2:软件设计 首先宏定义引脚配置: ```ABAP //SPIx GPIO #define FLASH_SPI_SCK_GPIO_CLK RCC_AHB_PERIPH_GPIOE #define FLASH_SPI_SCK_GPIO_PORT CW_GPIOC #define FLASH_SPI_SCK_GPIO_PIN GPIO_PIN_1 #define FLASH_SPI_MISO_GPIO_CLK RCC_AHB_PERIPH_GPIOE #define FLASH_SPI_MISO_GPIO_PORT CW_GPIOC #define FLASH_SPI_MISO_GPIO_PIN GPIO_PIN_2 #define FLASH_SPI_MOSI_GPIO_CLK RCC_AHB_PERIPH_GPIOE #define FLASH_SPI_MOSI_GPIO_PORT CW_GPIOC #define FLASH_SPI_MOSI_GPIO_PIN GPIO_PIN_3 #define FLASH_SPI_CS_GPIO_CLK RCC_AHB_PERIPH_GPIOE #define FLASH_SPI_CS_GPIO_PORT CW_GPIOC #define FLASH_SPI_CS_GPIO_PIN GPIO_PIN_0 //SPIx #define FLASH_SPIx CW_SPI1 #define FLASH_SPI_CLK RCC_APB2_PERIPH_SPI1 #define FLASH_SPI_APBClkENx RCC_APBPeriphClk_Enable2 ``` 其次进行SPI初始化配置: ```c void SPI_FLASH_Init(void) { SPI_InitTypeDefSPI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; /************************GPIO Configuration***********************/ RCC_AHBPeriphClk_Enable(FLASH_SPI_SCK_GPIO_CLK | FLASH_SPI_MISO_GPIO_CLK | FLASH_SPI_MOSI_GPIO_CLK | FLASH_SPI_CS_GPIO_CLK, ENABLE); FLASH_SPI_APBClkENx(FLASH_SPI_CLK, ENABLE); //SPI SCK MOSI MISO 复用 FLASH_SPI_AF_SCK; FLASH_SPI_AF_MISO; FLASH_SPI_AF_MOSI; //CS GPIO_InitStructure.Pins = FLASH_SPI_CS_GPIO_PIN; GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; GPIO_Init(FLASH_SPI_CS_GPIO_PORT, &GPIO_InitStructure); //SCK GPIO_InitStructure.Pins = FLASH_SPI_SCK_GPIO_PIN; GPIO_Init(FLASH_SPI_SCK_GPIO_PORT, &GPIO_InitStructure); //MOSI GPIO_InitStructure.Pins = FLASH_SPI_MOSI_GPIO_PIN; GPIO_Init(FLASH_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure); //MISO GPIO_InitStructure.Pins = FLASH_SPI_MISO_GPIO_PIN; GPIO_InitStructure.Mode = GPIO_MODE_INPUT; GPIO_Init(FLASH_SPI_MISO_GPIO_PORT, &GPIO_InitStructure); //拉高CS FLASH_SPI_CS_HIGH(); /************************SPI Configuration***********************/ SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; // 双线全双工 SPI_InitStructure.SPI_Mode = SPI_Mode_Master; // 主机模式 SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; // 帧数据长度为8bit SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; // 时钟空闲电平为高 SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; // 第二个边沿采样 SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; // 片选信号由SSI寄存器控制 SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8; // 波特率为PCLK的8分频 SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; // 最高有效位 MSB 收发在前 SPI_InitStructure.SPI_Speed = SPI_Speed_Low; // 低速SPI SPI_Init(FLASH_SPIx, &SPI_InitStructure); SPI_Cmd(FLASH_SPIx, ENABLE); } ``` ### 结果验证 编写测试函数代码: ```c #include"bsp_flash.h" #include"stdio.h" #include"main.h" extern TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength); //SPI TEST uint8_t TxBuffer[] = "This is SPI_FLASH Test"; uint8_t RxBuffer[BufferSize]; uint8_t DeviceID = 0; uint16_t ManufactDeviceID = 0; int32_t JedecID = 0; uint8_t UniqueID[8]; uint8_t status1; uint8_t status2; void SPI_FLASH_Test(void) { printf("\r\n2.SPI_FLASH Test Start\r\n"); TestStatus TransferStatus = FAILED; DeviceID = SPI_FLASH_DeviceID(); ManufactDeviceID = SPI_FLASH_ManufactDeviceID(); JedecID = SPI_FLASH_JedecID(); SPI_FLASH_UniqueID(UniqueID); //printf("\r\nDeviceID = 0x%X\r\nManufactDeviceID = 0x%X\r\nJedecID = 0x%X", DeviceID, ManufactDeviceID, JedecID); //printf("\r\nUniqueID = 0x "); //for(uint8_t i = 0;i<8;i++) //{ // printf("%X ", UniqueID[i]); //} /* 读状态寄存器 */ status1 = SPI_FLASH_ReadStatusReg1(); status2 = SPI_FLASH_ReadStatusReg2(); //printf("\r\nstatus1 = 0x%X\r\nstatus2 = 0x%X\r\n", status1, status2); // /* 写状态寄存器 */ // SPI_FLASH_WriteStatusReg1(0x00); // SPI_FLASH_WriteStatusReg2(0x00); // status1 = SPI_FLASH_ReadStatusReg1(); // status2 = SPI_FLASH_ReadStatusReg2(); // printf("\r\nstatus1 = 0x%X\r\nstatus2 = 0x%X\r\n", status1, status2); /* Check JEDEC ID */ if(JedecID == sJedecID) { //擦除扇区 4KB SPI_FLASH_SectorErase(FLASH_SectorToEraseAddress); //写数据 SPI_FLASH_BufferWrite(TxBuffer, FLASH_WriteAddress, BufferSize); printf("写入的数据为:%s\r\n", TxBuffer); //读数据 SPI_FLASH_BufferRead(RxBuffer, FLASH_ReadAddress, BufferSize); printf("读出的数据为:%s\r\n", RxBuffer); //检查写入的数据与读出的数据是否一致 TransferStatus = Buffercmp(TxBuffer, RxBuffer, BufferSize); if(TransferStatus == PASSED) { printf("SPI_FLASH Test OK\r\n"); } else { printf("\r\nSPI_FLASH Test Error:Read and Write Data is not same\r\n"); while(1); } //擦除扇区 4KB SPI_FLASH_SectorErase(FLASH_SectorToEraseAddress); //读数据 SPI_FLASH_BufferRead(RxBuffer, FLASH_ReadAddress, BufferSize); for(uint8_t j = 0; j < BufferSize; j++) { if(RxBuffer[j] != 0xFF) { printf("\r\nSPI_FLASH Test Error:FLASH Erase fail\r\n"); while(1); } } } else// (FlashID != sFLASH_ID) { printf("\r\nSPI_FLASH Test Error:Read JEDEC ID Error\r\n"); while(1); } } ``` 函数功能你主要是将“This is SPI_FLASH Test”字符串通过SPI_FLASH_BufferWrite写入到SPI_FLASH里面,然后通过SPI_FLASH_BufferRead将数据读取出来,读取成功之后通过串口打印出来。打开串口调试助手,查看信息是否成功读写。 ![image-20230806102110466](https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20230806102110466.png)
此帖出自
国产芯片交流论坛
最新回复
lugl4313820
恭喜flash烧写测试成功!
详情
回复
发表于 2023-8-6 11:26
点赞
关注
(1)
回复
分享
扫一扫,分享给好友
复制链接分享
链接复制成功,分享给好友
举报
提升卡
变色卡
千斤顶
lugl4313820
lugl4313820
当前离线
版主
最后登录
2024-11-23
在线时间
169 小时
威望
12019分
芯积分
10998分
(兑换)
E金币
668枚
(兑换)
(兑换)
好友
22
6841
帖子
11
TA的资源
版主
+ 好友
私信
沙发
发表于2023-8-6 11:26
只看该作者
恭喜flash烧写测试成功!
此帖出自
国产芯片交流论坛
回复
举报
返回列表
发新帖
回复
您需要登录后才可以回帖
登录
|
注册
发表回复
回帖后跳转到最后一页
活动
更多>>
有奖直播报名中!抢占工业4.1先机 文晔科技日等你来!
罗姆有奖直播 | 重点解析双极型晶体管的实用选型方法和使用方法
STM32N6终于要发布了,ST首款带有NPU的MCU到底怎么样,欢迎小伙们来STM32全球线上峰会寻找答案!
免费下载 | 安森美电动汽车充电白皮书,看碳化硅如何缓解“里程焦虑”!
是德科技有奖直播 | 应对未来高速算力芯片的设计与测试挑战
TI 有奖直播 | 使用基于 Arm 的 AM6xA 处理器设计智能化楼宇
安世半导体理想二极管与负载开关,保障物联网应用的稳健高效运行
报名直播赢【双肩包、京东卡、水杯】| 高可靠性IGBT的新选择——安世半导体650V IGBT
开源项目
更多>>
#第七届立创电赛#usb电压电流表
AD9773-EB,AD9773 评估板,12 位,160 MSPS,双 DAC
STEVAL-IHM029V2,基于 STM8S103F2 MCU 和 T1235T TRIAC 的通用电机控制评估板
555仿真图
具有 250ksps 18 位 LTC2376-18 SAR ADC、LTC6655-5 的 LTC6362 演示板
NCV551 150 mA CMOS 低 Iq 低压降稳压器的典型应用,适用于输入电压大于 12 V
DC826B-A,用于 LTC2950CTS8-2 开/关控制器的演示板,Vin (26.4V Max) = 2.7V - 26.4V
T12,手柄集成控制板,改成打板尺寸内
具有压缩和噪声门控的低噪声模拟 MEMS 麦克风和前置放大器应用电路
使用 NXP Semiconductors 的 TDA8543 的参考设计
随便看看
【CW32L052测评】学习笔记03(独立开门狗和IIC读写EEPROM)
#6:独立开门狗复位实验##6.1:硬件设计先看数据手册说明:![image-20230718153834527](https://giteebreyun/picture/raw/master/PicGO-updata-img/image-20230718153834527.png)##6.2:软件设计独立开门狗的库函数在#include"cw32l052_iwdt.h"里面有说明,我 ...
【CW32L052测评】学习笔记07(通过串口发送命令控制led灯开关)
###12.1:硬件设计查看原理图设计:![image-20230827230339299](https://boreyunaliyuncsimage-20230827230339299.png)从原理图可以看出,单片机使用PA15和PC10引脚分别控制LED1和LED2.单片机引脚高电平时,LED灯亮,单片机引脚低电平时,LED灯灭。###12.2: ...
请问大佬们,高频电子线路这门课如何学?,以后想做这方面工作
我之前做高频通讯类题的电赛,做了一年,感觉很有意思,虽然有些bug让人烧脑,结果到了老师上这门课的时候,老师只会讲结论,给做题,讲的很多的东西听着也不靠谱,比如说什么只需要知道结论就行,推导不需要了解,就我的电赛经历来看,指导老师经常是只给个 ...
【读书】《RISC-V 体系结构编程与实践(第2版)》-- RISC-V 架构寄存器学习
《计算机视觉之PyTorch数字图像处理》--全书概览
PCB板基本检测的9个小常识
什么是可用的放大器输出摆幅?
问一个关于注册表的低级问题
SYN480R-315无线接收芯片
问一下我这个外部中断定时50ms测频率怎么没显示啊?呜呜。。
查找数据手册?
搜索
EEWorld Datasheet 技术支持
热门标签
源代码
单片机
放大器
TI
ST
电源
分立器件
传感器
测试测量
模拟
电化学式传感器
共阴极数码管
多倍频发生器
arduino控制板
快速充电
扩频通信
编译码器
数字电桥
OneOS
ARPU
相关文章
更多>>
“跨芯片”量子纠缠实现 有助建构更强大的量子计算能力
IBM公司科学家实现了“跨芯片”量子纠缠——使两块“鹰”(Eagle)量子芯片成功纠缠在一起。每块量子芯片拥有127个量子比特,两块芯片共同完成了需要142个量子比特才能完成的计算任务。目前,单块芯
超声波贴片可持续无创监测血压
美国加州大学圣迭戈分校研究团队开发出一款创新性的可穿戴超声波贴片,可持续无创监测血压。这款设备首次在超过100位患者身上完成了严格的临床测试,标志着该领域的一个重要进展。相关研究发表于20日的《自然
欧洲三大芯片巨头,重新审视供应链
在上周刚刚举办的Electronica 2024 CEO圆桌论坛上,英飞凌,恩智浦以及意法半导体三家芯片巨头CEO齐亮相,三家CEO集体表达了对中美关系的担忧,同时三位也有一个共识,即中国在全球半导
消息称铠侠最快明天获上市批准,市值有望达 7500 亿日元
美国政府敲定对格芯 15 亿美元《CHIPS》法案补贴,支持后者提升在美产能
SK 海力士宣布量产全球最高的 321 层 1Tb TLC 4D NAND 闪存,计划 2025 上半年对外出货
UWB上车新花样,无线BMS也能用它?
填补国内空白!中国移动、华为等联合发布首颗GSE DPU芯片
三星电子 NRD-K 半导体研发综合体进机,将导入 ASML High NA EUV 光刻设备
苹果揭秘自研芯片成功原因:竞争对手没法用最新尖端技术
新帖速递
STM32和无源蜂鸣器播放声音的问题
车规级AECQ200介绍,混合铝电解电容器的选择
嵌入式教程_DSP技术_DSP实验箱操作教程:2-28 搭建轻量级WEB服务器实验
OPA847IDBVR运放器国产替代
AG32VF407测试UART
【得捷电子Follow Me第二期】第一章 收到货物的分享
请问这个红外接收头是什么型号?能用哪个型号代替?谢谢
出售全新未拆封ZYNQ 7Z020 FPGA核心板
用在锂电池供电的水表设置上的LORA模块,当有100块水表集中安装在一个楼道内时,节能
请问一下,当某个端口被设置为 RX0后,这个端口的输入输出方向还有必要设置吗
今年怎么这么难,比疫情时还难,三十了面临失业好迷茫
请教稳压管测试问题
【小华HC32F448测评】关于小华半导体的UART中断发送和PRINTF构造和重定向
【BIGTREETECH PI开发板】 HDMI输出测试
【BIGTREETECH PI开发板】+08.音频测试(zmj)
等待很久的STM32N6终于要发布了!
ST首款带有NPU的MCU到底怎么样,欢迎小伙们来STM32全球线上峰会寻找答案!报名峰会,还能赢【开发板、京东卡】呦~12月12日14:00不见不散!
查看 »
有奖直播报名| 高可靠性IGBT新选择 —— 安世半导体650V IGBT
【直播时间】12月19日(周四)下午15:00-16:30
【直播好礼】定制双肩商务包、30元京东卡、吸管玻璃杯
查看 »
安世半导体直播报名中
直播主题:安世半导体理想二极管与负载开关,保障物联网应用的稳健高效运行
直播时间:12月17日(周二)下午14:00
报名就有机会获得:定制双肩商务包、30元京东卡、吸管玻璃杯
查看 »
PI 电源小课堂 | 无 DC-DC 变换实现多路高精度输出反激电源
时间:即日起-12月15日
看视频学习电源干货,答题赢取京东卡!
查看 »
参会有好礼 | 2024 瑞萨电子MCU/MPU工业技术研讨会
深圳站:11月30日(周六)深圳湾万怡酒店
上海站:12月06日(周五)上海喜玛拉雅酒店
奖励设置:现金红包、螺丝刀套装或30元京东卡
查看 »
Littelfuse 新品赋能电子产品安全可靠并高效, 10+挑战等你探索!
Littelfuse 应用赋能星球,覆盖了诸多应用痛点及解决办法,邀请工程师一起探索,解锁更多设计力!
查看 »
下载资料赢好礼!看Vicor模块化电源解决方案如何推动创新
活动时间:即日起-2024年12月31日
如何参与:点击活动页内您想了解的模块,找到资料下载即可参与抽奖,活动结束后统一发奖!
查看 »
有奖活动|英飞凌高密度双相电源模块为高性能运算平台而生
活动时间:即日起-12月15日
活动奖励:蓝牙音箱、氮化镓充电器套装、黑色小背包
查看 »
本月精选下载推荐:
Vishay——选型-汽车级表面贴装和通孔超快整流器
查看 »
本周精选下载推荐:电源管理基础Dummies
本周小编给大家带来一本超简单、超干货的电子书——《电源管理基础Dummies》!内容深入浅出,排版舒服简洁,分分钟能get到电源管理最核心的知识内容。
查看 »
关闭
站长推荐
1
/10
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
电信业务审批[2006]字第258号函
京公网安备 11010802033920号
Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复
返回顶部
返回列表
论坛首页
版块列表
专业技术中心
TI技术论坛
ST传感器与低功耗无线技术论坛
ADI参考电路
DigiKey得捷技术专区
ADI · 世健工业技术
电子技术交流
嵌入式系统
单片机
国产芯片交流
电机驱动控制
FPGA/CPLD
模拟电子
电源技术
PCB技术
RF/无线
传感器
综合技术交流
下载中心专版
大学堂专版
测评中心专版
创意与实践
电子竞赛
DIY/开源硬件专区
淘e淘
创意市集
行业应用
汽车电子
移动便携
医疗电子
工控电子
安防电子
休息一下
聊聊、笑笑、闹闹
工作这点儿事
为我们提意见&公告
EEWorld颁奖专区
信息发布
最新帖子
最新帖子
最新回复
精华
消灭零回复
测评中心
活动中心
积分兑换
E金币兑换
芯积分
厂商专区
TI技术论坛
ST传感器与低功耗无线技术论坛