在zynq使用w25q256出现问题,先把问题记录下来,暂时为解决。

我们使用环境 Linux-5.4.151,使用SPI FLASH启动,SPI FLASH :W25q256 (32MB)

内核启动 spi flash 报错,中间有添加打印调试信息

[    0.592838] Initialise system trusted keyrings
[    0.597462] workingset: timestamp_bits=30 max_order=18 bucket_order=0
[    0.610471] ntfs: driver 2.1.32 [Flags: R/W].
[    0.655821] Key type asymmetric registered
[    0.659917] Asymmetric key parser 'x509' registered
[    0.664882] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 250)
[    0.672269] io scheduler mq-deadline registered
[    0.676824] io scheduler kyber registered
[    0.682413] dma-pl330 f8003000.dmac: Loaded driver for PL330 DMAC-241330
[    0.689161] dma-pl330 f8003000.dmac:         DBUFF-128x8bytes Num_Chans-8 Num_Peri-4 Num_Events-16
[    0.754711] Serial: 8250/16550 driver, 5 ports, IRQ sharing disabled
[    0.762863] STMicroelectronics ASC driver initialized
[    0.777388] brd: module loaded
[    0.789431] loop: module loaded
[    0.793948] spi-nor spi0.0: flash:w25q256
[    0.798018] spi-nor spi0.0: flash id:ef-40-19-0-0-0
[    0.802895] spi-nor spi0.0: flash id len:3
[    0.807027] spi-nor spi0.0: flash sector size:65536
[    0.811896] spi-nor spi0.0: flash nsector size:512
[    0.816702] spi-nor spi0.0: flash page size:256
[    0.821227] spi-nor spi0.0: flash addr width:0
[    0.825689] spi-nor spi0.0: flash flags:97
[    0.829777] spi-nor spi0.0: flash:w25q256
[    0.833780] spi-nor spi0.0: flash id:ef-40-19-0-0-0
[    0.838669] spi-nor spi0.0: flash id len:3
[    0.842762] spi-nor spi0.0: flash sector size:65536
[    0.847657] spi-nor spi0.0: flash nsector size:512
[    0.852440] spi-nor spi0.0: flash page size:256
[    0.856992] spi-nor spi0.0: flash addr width:0
[    0.861433] spi-nor spi0.0: flash flags:97
[    0.865713] hwcaps:8 line:2816
[    0.868757] hwcaps:16 line:2816
[    0.871889] hwcaps:128 line:2816
[    0.875148] hwcaps:256 line:2816
[    0.878365] hwcaps:512 line:2816
[    0.881597] spi-nor spi0.0: share:66459 hw mask 8355839
[    0.886838] hwcaps:1 line:2816
[    0.889884] jjl 2810
[    0.892061] hwcaps:2 line:2816
[    0.895130] jjl 2810
[    0.897305] hwcaps:8 line:2816
[    0.900351] jjl 2810
[    0.902529] hwcaps:16 line:2816
[    0.905689] jjl 2810
[    0.907868] hwcaps:128 line:2816
[    0.911088] jjl 2810
[    0.913267] hwcaps:256 line:2816
[    0.916508] jjl 2810
[    0.918683] hwcaps:65536 line:2816
[    0.922076] jjl 2810
[    0.924286] spi-nor spi0.0: nor spi mem
[    0.928112] spi-nor spi0.0: share:0
[    0.931592] spi-nor spi0.0: can't select read settings supported by both the SPI controller and memory.
[    0.941012] spi-nor: probe of spi0.0 failed with error -22
[    0.946526] Xilinx QSPI Driver:700
[    0.950431] sdhci: Secure Digital Host Controller Interface driver
[    0.956648] sdhci: Copyright(c) Pierre Ossman
[    0.960998] Synopsys Designware Multimedia Card Interface Driver
[    0.967239] sdhci-pltfm: SDHCI platform and OF driver helper
[    0.999035] mmc0: SDHCI controller on e0100000.sdhci [e0100000.sdhci] using ADMA
[    1.006925] ledtrig-cpu: registered to indicate activity on CPUs
[    1.013462] fpga_manager fpga0: Xilinx Zynq FPGA Manager registered
[    1.020642] Registering SWP/SWPB emulation handler
[    1.026245] Loading compiled-in X.509 certificates
[    1.043940] UBI error: cannot open mtd 3, error -19
[    1.048934] hctosys: unable to open rtc device (rtc0)
[    1.054557] VFS: Cannot open root device "ubi0:rootfs" or unknown-block(0,0): error -19
[    1.062612] Please append a correct "root=" boot option; here are the available partitions:
[    1.071307] 0100           65536 ram0
[    1.071311]  (driver?)
[    1.077483] 0101           65536 ram1
[    1.077487]  (driver?)
[    1.083664] 0102           65536 ram2
[    1.083667]  (driver?)
[    1.089821] 0103           65536 ram3
[    1.089825]  (driver?)
[    1.095989] 0104           65536 ram4
[    1.095993]  (driver?)
[    1.102174] 0105           65536 ram5
[    1.102177]  (driver?)
[    1.108385] 0106           65536 ram6
[    1.108389]  (driver?)
[    1.114583] 0107           65536 ram7
[    1.114587]  (driver?)
[    1.120761] 0108           65536 ram8
[    1.120764]  (driver?)
[    1.126965] 0109           65536 ram9
[    1.126968]  (driver?)
[    1.133142] 010a           65536 ram10
[    1.133145]  (driver?)
[    1.139485] 010b           65536 ram11
[    1.139488]  (driver?)
[    1.145782] 010c           65536 ram12
[    1.145785]  (driver?)
[    1.152051] 010d           65536 ram13
[    1.152054]  (driver?)
[    1.158345] 010e           65536 ram14
[    1.158349]  (driver?)
[    1.164588] 010f           65536 ram15
[    1.164591]  (driver?)
[    1.170778] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
[    1.179044] CPU1: stopping
[    1.181753] CPU: 1 PID: 0 Comm: swapper/1 Not tainted 5.4.151 #28
[    1.187839] Hardware name: Xilinx Zynq Platform

分析源码

在drivers/mtd/spi-nor/spi-nor.c中

static int spi_nor_default_setup(struct spi_nor *nor,const struct spi_nor_hwcaps *hwcaps)
{struct spi_nor_flash_parameter *params = &nor->params;u32 ignored_mask, shared_mask;int err;/** Keep only the hardware capabilities supported by both the SPI* controller and the SPI flash memory.*/shared_mask = hwcaps->mask & params->hwcaps.mask;
dev_err(nor->dev,"share:%d hw mask %d\n",shared_mask,hwcaps->mask);if (nor->spimem) {/** When called from spi_nor_probe(), all caps are set and we* need to discard some of them based on what the SPI* controller actually supports (using spi_mem_supports_op()).*/spi_nor_spimem_adjust_hwcaps(nor, &shared_mask);dev_err(nor->dev,"nor spi mem\n");} else {/** SPI n-n-n protocols are not supported when the SPI* controller directly implements the spi_nor interface.* Yet another reason to switch to spi-mem.*/ignored_mask = SNOR_HWCAPS_X_X_X;dev_err(nor->dev,"ig mask :%d\n",ignored_mask);if (shared_mask & ignored_mask) {dev_dbg(nor->dev,"SPI n-n-n protocols are not supported.\n");shared_mask &= ~ignored_mask;}}/* Select the (Fast) Read command. */err = spi_nor_select_read(nor, shared_mask);if (err) {dev_err(nor->dev,"share:%d\n",shared_mask);dev_err(nor->dev,"can't select read settings supported by both the SPI controller and memory.\n");return err;}/* Select the Page Program command. */err = spi_nor_select_pp(nor, shared_mask);if (err) {dev_err(nor->dev,"can't select write settings supported by both the SPI controller and memory.\n");return err;}/* Select the Sector Erase command. */err = spi_nor_select_erase(nor);if (err) {dev_err(nor->dev,"can't select erase settings supported by both the SPI controller and memory.\n");return err;}return 0;
}

发现是上述函数

spi_nor_spimem_adjust_hwcaps(nor, &shared_mask);

把shared_mask给置零

追踪函数

static int spi_nor_spimem_check_op(struct spi_nor *nor,struct spi_mem_op *op)
{/** First test with 4 address bytes. The opcode itself might* be a 3B addressing opcode but we don't care, because* SPI controller implementation should not check the opcode,* but just the sequence.*/op->addr.nbytes = 4;if (!spi_mem_supports_op(nor->spimem, op)) {if (nor->mtd.size > SZ_16M)return -ENOTSUPP;/* If flash size <= 16MB, 3 address bytes are sufficient */op->addr.nbytes = 3;if (!spi_mem_supports_op(nor->spimem, op))return -ENOTSUPP;}return 0;
}

函数spi_nor_spimem_check_op返回ENOTSUPP。w25q256是32M FLASH这里会检查spi控制器是否支持4字节地址spi_mem_supports_op,这个函数调用spi控制器中函数zynq_qspi_supports_op

位置drivers\spi\spi-zynq-qspi.c

static bool zynq_qspi_supports_op(struct spi_mem *mem,const struct spi_mem_op *op)
{if (!spi_mem_default_supports_op(mem, op))return false;/** The number of address bytes should be equal to or less than 3 bytes.*/if (op->addr.nbytes > 3)return false;return true;
}

4字节地址,直接返回错误,看来需要对zynq spi 控制器进行打补丁

解决办法把xilinx提供的5.10内核版本的spi-zynq-qspi.c复制过来替换,有几个小bug修复一下就可以。

ZYNQ使用W25Q256问题笔记相关推荐

  1. 5、赛灵思-Zynq UltraScale+ MPSoC学习笔记:Petalinux 的设计流程及定制Linux系统

    5.赛灵思-Zynq UltraScale+ MPSoC学习笔记:Petalinux 的设计流程及定制Linux系统 声明:本文是学习赛灵思 Zynq UltraScale+ MPSoC 5EV过程中 ...

  2. 转载:ZYNQ+linux网口调试笔记(1)PS-GEM0

    ZYNQ+linux网口调试笔记(1)PS-GEM0 转载原文:https://www.jianshu.com/p/a4e25e8b2f5e 开发环境 Windows SDK 2017.4 Ubunt ...

  3. Zynq Fatfs文件系统应用笔记

    Zynq Fatfs文件系统应用笔 Hello,panda 笔记介绍基于所描述的Zynq Fatfs基于Xilinx xilffsv3.0和Sdpsv2.4,文件系统采用在Bare-Metal和轻量级 ...

  4. zynq linux如何使用pl ip,ZYNQ+linux网口调试笔记(3)PL-ETH

    1. 开发环境 Windows SDK 2017.4 Ubuntu Petalinux 2017.4 硬件平台:米联客ZYNQ开发板MIZ7035 2. 开发目标 在ZYNQ上使用gigE Visio ...

  5. zynq linux ip配置,ZYNQ+linux网口调试笔记(2)PS-GEM1

    1. 开发环境 Windows SDK 2017.4 Ubuntu Petalinux 2017.4 硬件平台:米联客ZYNQ开发板MIZ7035 2. 开发目标 在ZYNQ上使用gigE Visio ...

  6. zc706开发板的linux移植,Zynq—Linux移植学习笔记(十)

    在zynq开发板zc706上,网络通路由下面三个设备组成: 其中zynq负责对phy进行配置,当zynq上的网络控制器以及phy完成正确配置时,能够看到RJ45上面的黄灯亮,此时表明链路已经通了.如果 ...

  7. zynq linux找不到flash,Zynq—Linux移植学习笔记(十八):Zynq下NOR_FLASH挂载文件系统...

    1. 背景介绍 板子上的zynq通过emc外接一块nor flash,地址分配如下: Nor flash的起始地址为0x80000000.当zynq上运行Linux后可以通过对该地址起始的区域进行擦除 ...

  8. 江山易改本性难移之ZYNQ SDK API函数笔记(UART)

    初学Xilinx ZYNQ SDK的开发,下面记录使用到的API函数及自己的理解.若有误,还请指教. UART函数 常用编程步骤: 1.查找输入设备的ID查找设备: 2.输入的配置信息初始化: 3.设 ...

  9. 江山易改本性难移之ZYNQ SDK API函数笔记(GPIO函数)

    初学Xilinx ZYNQ SDK的开发,下面记录使用到的API函数及自己的理解.若有误,还请指教. xgpiops函数 常用编程步骤: 1.查找输入设备的ID查找设备: 2.初始化GPIO(最新版本 ...

  10. 江山易改本性难移之ZYNQ SDK API函数笔记(Timer)

    初学Xilinx ZYNQ SDK的开发,下面记录使用到的API函数及自己的理解.若有误,还请指教. Timer函数 常用编程步骤: 1.查找输入设备的ID查找设备: 2.输入的配置信息初始化: 3. ...

最新文章

  1. 企业网络翻译官——DNS
  2. 什么是COM与DCOM
  3. ubuntu kylin 14.04安装配置redis-2.8.9(转)
  4. 防止MDI子窗体多次实例化的代码
  5. 听说最近你读过不少书
  6. 下载 golang.org/x 包出错不用代理的解决办法
  7. 基础练习 01字串 c语言
  8. ios如何判断键盘是否已经显示
  9. 设计模式学习笔记——解释器(Interpreter)模式
  10. 《HTML5与CSS3实战指南》——第2章 HTML5样式的标记2.1 The HTML5 Herald简介
  11. leancloud上传php源码部署,部署灵动云商到LeanCloud[图解]
  12. linux 类似迅雷下载软件,推荐几个可以替代迅雷的下载软件
  13. curl和gopher协议(ssrf的利用)
  14. 如何在命令行中显示五彩斑斓的“黑”
  15. 【21天习惯养成记~~day17晚】
  16. win10系统关闭哪些服务器,win10.1系统哪些服务可以关闭掉?
  17. 如何在移动开发者的寒冬中破冰而出?
  18. 光电器件(发光器件)特征与发光特性介绍
  19. java开发速成班培训课程(1)
  20. 视频垂直翻转播放的效果,如何同时制作多个视频

热门文章

  1. 华为光伏usb适配器_华为P40无线充电手机壳拆解:1款配件补上22.5W无线快充
  2. 物料编码是计算机识别和检索物料的( ),物料编码是计算机识别和检索物料的。...
  3. 超简单版Python打包exe文件,并修改图标,这将是你见过最容易上手的教程~
  4. java web在线购物_JAVAWEB网上商城购物系统
  5. [java]房屋出租系统
  6. js头像裁剪实现——canvas+Jcrop+jQuery
  7. 蝰蛇音效音效包_用数据科学分析音效迷艺术
  8. Springboot+高校考勤小程序 毕业设计-附源码131039
  9. 易居IPO后首份成绩单透露了什么秘密?|一点财经
  10. python链家数据分析_练习—利用Python对链家网广州二手房进行数据分析