NUC980 添加XT25BF256BWSIG spi-nor flash

2023-11-22 14:10

本文主要是介绍NUC980 添加XT25BF256BWSIG spi-nor flash,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

nuc980板子更换了一个新的spi-nor flash,需要在boot和内核里注册,注册后启动挂载文件系统报错,这里简单记录一下处理方法

首先在boot上添加spi-nor的芯片id

修改文件:NUC970_U-Boot_v2016-spi/drivers/mtd/spi/sf_params.c
在spi_flash_params_table中增加一行,这里看到原来有XT系列的其他芯片,直接在其下面添加即可:

#ifdef CONFIG_SPI_FLASH_XTX		/* XTX */{"XT25F08BSSIGU",  0x0b4013, 	0x0,	64 * 1024,   16, RD_FULL | WR_QPP | SECT_4K},{"XT25F16BSSIGU",  0x0b4014, 	0x0,	64 * 1024,   32, RD_FULL | WR_QPP | SECT_4K},{"XT25F32BSSIGU",  0x0b4015, 	0x0,	64 * 1024,   64, RD_FULL | WR_QPP | SECT_4K},{"XT25F64BSSIGU",  0x0b4016, 	0x0,	64 * 1024,   128, RD_FULL | WR_QPP | SECT_4K},{"XT25F128BSSIGU",  0x0b4017, 	0x0,	64 * 1024,   256, RD_FULL | WR_QPP | SECT_4K},{"XT25F256BSSIGU",  0x0b4018, 	0x0,	64 * 1024,   512, RD_FULL | WR_QPP | SECT_4K},{"XT25BF256BWSIG",  0x0b4019,   0x0,	64 * 1024,   512, RD_FULL | WR_QPP | SECT_4K},  //新增加
#endif
配置uboot支持XT的spi-nor

页面路径:Device Drivers > SPI Flash Support
boot

内核添加添加spi-nor的芯片id

修改文件:drivers/mtd/spi-nor/spi-nor.c
找到spi_nor_ids[] =
里面也有XT系列的参数:

	/* XTX -- XT25x "blocks" are 64K, "sectors" are 4KiB */{ "XT25F08BSSIGU", INFO(0x0b4013, 0, 64 * 1024,  16, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },{ "XT25F16BSSIGU", INFO(0x0b4014, 0, 64 * 1024,  32, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },{ "XT25F32BSSIGU", INFO(0x0b4015, 0, 64 * 1024,  64, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },{ "XT25F64BSSIGU", INFO(0x0b4016, 0, 64 * 1024,  128, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },{ "XT25F128BSSIGU", INFO(0x0b4017, 0, 64 * 1024,  256, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },{ "XT25F256BSSIGU", INFO(0x0b4018, 0, 64 * 1024,  512, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },{ "XT25BF256BWSIG", INFO(0x0b4019, 0, 64 * 1024,  512,  SECT_4K) }, //新增加的

这里需要注意下,如何最后的flag参数那里加上SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ的话,会导致文件系统挂载错误,错误如下:

jffs2 Magic bitmask 错误
jffs2: Node at 0x00000f6c with length 0x00000144 would run over the end of the erase block
[    1.133830] jffs2: Perhaps the file system was created with the wrong erase size?
[    1.141435] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000f70: 0x0144 instead
[    1.150994] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000f74: 0x912a instead
[    1.160547] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000f78: 0x0002 instead
[    1.170127] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000f7c: 0x000d instead
[    1.180689] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000f80: 0x81a4 instead
[    1.190183] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000f84: 0x03e8 instead
[    1.199668] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000f88: 0x11d8 instead
[    1.209151] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000f8c: 0xdec2 instead
[    1.218634] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000f90: 0xdec2 instead
[    1.228102] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000f94: 0xdec2 instead
[    1.237581] jffs2: Further such events for this erase block will not be printed
[    1.245110] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00001000: 0x3fb1 instead
[    1.254615] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00001004: 0x1a28 instead
[    1.264102] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00001008: 0x7f01 instead
[    1.273586] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000100c: 0x505d instead
[    1.283098] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00001010: 0x84c8 instead
[    1.292588] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00001014: 0xd8d1 instead
[    1.302072] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00001018: 0x4001 instead
[    1.311555] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000101c: 0x8485 instead
[    1.321033] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00001020: 0x65b1 instead
[    1.330514] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00001024: 0x5d81 instead
文件系统打包命令
mkfs.jffs2 -s 0x1000 -e 0x10000 -p --pad=0x1A00000 -d rootfs/ -o rootfs-jffs2.img

这里-s代表页大小,普通spi nor flash的页大小是256字节,即0x100,但是这里测试用0x1000(4K)也没问题;

-e表示擦除的块大小,普通spi nor flash的块大小是64K字节,即0x10000
-p表示分区大小,在生成时会擦除分区大小的flash初始化。
这里必须和uboot里指定的分区大小一致,否则会出现脏页。

这篇关于NUC980 添加XT25BF256BWSIG spi-nor flash的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/410698

相关文章

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

什么是 Flash Attention

Flash Attention 是 由 Tri Dao 和 Dan Fu 等人在2022年的论文 FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness 中 提出的, 论文可以从 https://arxiv.org/abs/2205.14135 页面下载,点击 View PDF 就可以下载。 下面我

STM32内部闪存FLASH(内部ROM)、IAP

1 FLASH简介  1 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 2 通过在程序中编程(IAP)实现程序的自我更新 (OTA) 3在线编程(ICP把整个程序都更新掉) 1 系统的Bootloader写死了,只能用串口下载到指定的位置,启动方式也不方便需要配置BOOT引脚触发启动  4 IAP(自己写的Bootloader,实现程序升级) 1 比如蓝牙转串口,

STM32 ADC+DMA导致写FLASH失败

最近用STM32G070系列的ADC+DMA采样时,遇到了一些小坑记录一下; 一、ADC+DMA采样时进入死循环; 解决方法:ADC-dma死循环问题_stm32 adc dma死机-CSDN博客 将ADC的DMA中断调整为最高,且增大ADCHAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, ADC_Buffer_Size); 的ADC_Bu

stm32之软件SPI读写W25Q64存储器应用案例

系列文章目录 1. stm32之SPI通信协议 文章目录 系列文章目录前言一、电路接线图二、应用案例代码三、应用案例分析3.1 SPI通信模块3.2 W25Q64模块3.3 主程序 前言 提示:本文主要用作在学习江科大自化协STM32入门教程后做的归纳总结笔记,旨在学习记录,如有侵权请联系作者 本案例使用软件SPI通信的方式实现了STM32与W25Q64 Flas

Flink1.10基于工厂模式的任务提交与SPI机制

《2021年最新版大数据面试题全面开启更新》 Flink任务执行模式包含了yarn-session、standalone、per-job、local, 在1.10中又增加k8s的执行模式,那么在任务提交过程中如何根据不同的执行模式进行任务提交呢?主要通过两个接口来实现:PipelineExecutorFactory 与 PipelineExecutor。PipelineExecutorF

通过 Flash 让所有浏览器支持 WebP 格式图像解码

http://www.guao.hk/tag/webp#userconsent# http://www.etherdream.com/WebP/

提高Flash builder编译速度 (转)

提高Flash builder编译速度   2013-04-08 03:14:42|  分类: flash |  标签: |举报 |字号大中小 订阅 我们在开发过程中随着项目的不断壮大,经常会碰到编译速度过慢,IDE崩溃等令人头痛的问题,这里我总结了一下网上别人的经验,对FB进行了3点优化,效果明显  1、把 Build Auto 改成 手动 Build  2

转载 SPI的比喻理解

SPI 传输是一个虚拟的移位寄存器方式。 你这么理解就可以: 主机和从机之间有一条 16 格的传送带。主机一格一格拨动它转动(相当于发送时钟)。 如果是主机发送,它就把一个个的东西放在传送带上,转动 8 次,就传到从机一侧了。这时,从机可以从传送带上将东西取下。如果从机没有取东西,这些东西再转 8 次又回到主机一侧。 如果是主机接收,从机就要把 8 个东西一次放上传送带。当主机转动 8 次,东西就

DM8168 关于nand flash的折腾之路

主机平台:ubuntu 12.04  目标平台:TI DM8168 开发套件:*****北京某公司开发板 拿到板子,看了看资源,看了看平台的组成,上网看了看这写博客的评价,之后就开始了折腾之路,还是老方法;首先用厂商给的东西,原封不动的启动,摸索认识一番,TI给的是带开发套件的SD卡,按照 【快速开始QSG】;拨马开关-连线上电,启动。一切ok. 接着安装交叉编译工具,配置host主