目录
1.项目问题及简单故障定位
2.概述启动方式
3.QSPI协议
4.nor flash封装(die的概念)及工作模式
1.项目问题及简单故障定位:
使用64MB的nor flash引导启动uboot,仅7M就出现固化后会在uboot范围内不断重启的问题,在修改uboot配置后固化系统后reboot故障,且固化地址与容量不符
1)仅7M系统固化后开机不断重启或者死机无法开启现象:
因为cpu配套uboot设置了默认外设qspi的容量为8M,所以uboot+系统7M容量大于8M,造成文件写入冲突。---修改uboot引导配置qspi容量
2)修改引脚配置后发现容量最大识别到16M,表象为4个16M且读写操作复刻影响,实际可用为前16M空间并未复刻。---芯片默认为3字节模式,3字节模式最大为16M:0xffffffff
3)修改为4字节后:发现为32+32M,出现reboot故障及无法保存环境变量问题。经检查发现使用的双die NOR FLASH,一次只能active一个die----上游cpu主芯片的复位等操作为3字节模式,需要修改驱动和reboot为进行reboot等操作时切换到3字节模式
(缺点:仅支持正常情况下的reboot,无法处理硬件 reset 主芯片的操作,因为 reset 主芯片并不会让 nor 也 reset,那么 nor 就仍处于 4 字节地址模式,不响应 boot rom 的 3 字节地址命令,最好硬件设计上做处理)
2.概述启动方式:
操作系统会控制内核并对硬件的系统资源进行合理分配。
主板引导程序(固件:写入到硬件上的一个软件程序)最早可分为BIOS和UEFI,Firmware包括uboot、pmon、和UEFI。ps:关于硬件开机后怎么进行操作系统的判别和读取知识后续得空再认真学学。《鸟哥私房菜》
查阅STM32启动方式,主要分为外部启动和内部启动:
在芯片上电或复位时
①系统会首先运行外部Flash/内部中的Bootloader程序
②Bootloader程序会检测外部Flash中是否有用户程序,如果有,则将用户程序加载到内部Flash中并跳转到用户程序的入口地址执行
③外部方式需要在外部Flash中烧录Bootloader程序和用户程序。而外部存储介质类型有:Nor flash、nand flash、emmc、SD等,本次主要记录QSPI flash。
3.QSPI协议
这方面网上有很多信息了,包括手册也会有很多描述。有空多看看手册对应学习吧。此处粗略记录主要是方便引导自己补充知识盲点,后续是否补充未可知:
①standard:SCLK、CS#、SI、SO、RST#或者WP#&HOLD(全双工)
②dual: SCLK、CS#、IO0、IO1、RST#(半双工2bit)
③quad: SCLK、CS#、IO0、IO1、IO2、IO3(半双工4bit)
追求更快传输速度用半双工模式,省略了VCC和GND。时序关系略,好多都略略略,比较好查。
4.nor flash封装(die的概念)及工作模式
由于本次项目的CPU厂家技术支持表示只支持单die的flash,我至今仍然存疑。简单粗糙的理解flash的封装,64MB:单die类比一个64MB的作业本,双die类比2个32MB的作业本。
仅限本项目中体会到的是,在一次只能打开一个作业本(片选)的情况下只能对一个作业本A开始进行操作,这里强调一下是开始,目前了解的信息里,只要开始了就可继续完成后面的操作,在打开另外一本作业B操作时并不会影响中断A中正在进行的操作。 ----所以我还是认为只支持单die的问题让我感觉很不符合常理。
由于更多专业的封装知识和flash类型描述最好还是查阅专业选手,这边就只留坑。对于芯片的选型也要注意芯片的架构和封装,flash的选型类型要根据实际容量、操作和应用需求以及芯片支持协议来进行选择,当然了,客户第一。