STM32F750 uClinux加载QSPI Flash分区成功

2020-03-01 11:58发布

emcraft的STM32F7 BSP默认是加载并行NOR Flash分区的,不加载QSPI Flash。老实说这个配置比较老了,现在用并行NOR的越来越少了,QSPI Flash越来越多。
为了加载我板子上的QSPI Flash,需要做以下工作:
1. 在编译kernel时加上mtd,qspi驱动,jffs2文件系统(当然也可以是其他filesystem);
2. 在设备树里面添加qspi设备,指定硬件引脚,指定地址范围并分区;
3. 在linux启动脚本里挂载qspi flash分区。

通过搜索源码,在linux源码包里有STM32 QUADSPI驱动,第一项条件满足。接下来修改设备树(设置QSPI CLK=54MHz,32MB的空间我分了两个区,一个放内核10M,另一个放用户数据22M):
  1. /*
  2. * QSPI
  3. */
  4. &qspi {
  5.         status = "okay";        
  6.         pinctrl-names = "default";
  7.         pinctrl-0 = <&pinctrl_qspi>;
  8.         freq = <54000000>;
  9.         flash = "w25q256jv";
  10.         
  11.         partition@0x00000000 {
  12.                 label = "spi_flash_part0";
  13.                 reg = <0x00000000 0xa00000>;
  14.         };

  15.         partition@0x000a0000 {
  16.                 label = "spi_flash_part1";
  17.                 reg = <0x00a00000 0x1600000>;
  18.         };
  19. };
复制代码

指定QUADSPI引脚
  1.                 qspi {
  2.                         pinctrl_qspi: qspi-0 {
  3.                                 st,pins {
  4.                                         cs_n = <&gpiob 6 ALT10 NO_PULL PUSH_PULL FAST_SPEED>;
  5.                                         sck = <&gpiob 2 ALT9 NO_PULL PUSH_PULL FAST_SPEED>;
  6.                                         io0 = <&gpiof 8 ALT10 NO_PULL PUSH_PULL FAST_SPEED>;
  7.                                         io1 = <&gpiof 9 ALT10 NO_PULL PUSH_PULL FAST_SPEED>;
  8.                                         io2 = <&gpiof 7 ALT9 NO_PULL PUSH_PULL FAST_SPEED>;
  9.                                         io3 = <&gpiof 6 ALT9 NO_PULL PUSH_PULL FAST_SPEED>;

  10.                                 };
  11.                         };
  12.                 };
复制代码

编译linux,下载到板子,上电启动。可以看到在log出现了qspi分区信息,说明加载成功:
QSPI MTD.png

启动后在系统里查看mtd分区:
mtd.png

手动挂载用户分区到linux系统目录:
mount -t jffs2 /dev/mtdblock3 /mnt/qspi


拷贝几个文件进去,断电再上电文件还在没有丢失。证明qspi flash挂载成功!

tmp.png

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。