新唐NUC980spi与nor-flash(w25q128)通信配置
目前调试的项目是将uImage文件放在flash中,启动时uboot将其拷贝至内存并带起,所以升级内核时只需要将flash中的uImage替换即可,此时就需要使用spi与flash通信完成擦除、读写等操作。由于设置的是从flash启动,所以硬件上只能使用的是qspi与w25q128通信,相关配置如下:
驱动配置
进入配置界面:
$ cd ~/NUC970_Buildroot-master/
$ make linux-menuconfig
首先依次选择Device Drivers > SPI support,选择项如下,请根据具体硬件设计选择:
同时,还需开启MTD,返回上一层,选择Memory Technology Device (MTD) support,选择项如下:
黄色框中Self-contained MTD device drivers下拉选项选择如下:
注意:若上一层中红色框未选择,此选项不会出现!
红色框选项也有下拉选项,但此选项需根据使用的flash是否支持该功能来选择:
另外,还需要设置支持JFFS2文件系统,选择File systems > Miscellaneous filesystems,具体选项如下:
文件修改
驱动配置完成后,还需要修改相关文件,以保证能正确匹配flash型号。
打开m25p80.c文件
$ cd ~/NUC970_Buildroot-master/output/build/linux-master/drivers/mtd/devices
$ vi m25p80.c
可以找到如下结构体:
static const struct spi_device_id m25p_ids[] = {/** Entries not used in DTs that should be safe to drop after replacing* them with "nor-jedec" in platform data.*/{"s25sl064a"}, {"w25x16"}, {"m25p10"}, {"m25px64"},/** Entries that were used in DTs without "nor-jedec" fallback and should* be kept for backward compatibility.*/{"at25df321a"}, {"at25df641"}, {"at26df081a"},{"mr25h256"},{"mx25l4005a"}, {"mx25l1606e"}, {"mx25l6405d"}, {"mx25l12805d"},{"mx25l25635e"},{"mx66l51235l"},{"n25q064"}, {"n25q128a11"}, {"n25q128a13"}, {"n25q512a"},{"s25fl256s1"}, {"s25fl512s"}, {"s25sl12801"}, {"s25fl008k"},{"s25fl064k"},{"sst25vf040b"},{"sst25vf016b"},{"sst25vf032b"},{"sst25wf040"},{"m25p40"}, {"m25p80"}, {"m25p16"}, {"m25p32"},{"m25p64"}, {"m25p128"},{"w25x80"}, {"w25x32"}, {"w25q32"}, {"w25q32dw"},{"w25q80bl"}, {"w25q128"}, {"w25q256"},/* Flashes that can't be detected using JEDEC */{"m25p05-nonjedec"}, {"m25p10-nonjedec"}, {"m25p20-nonjedec"},{"m25p40-nonjedec"}, {"m25p80-nonjedec"}, {"m25p16-nonjedec"},{"m25p32-nonjedec"}, {"m25p64-nonjedec"}, {"m25p128-nonjedec"},{ },
};
确认其中是否有需要的flash型号,可以看到其中支持w25q128该型号flash。
确认完成后再打开dev.c文件:
$ cd ~/NUC970_Buildroot-master/output/build/linux-master/arch/arm/mach-nuc980
$ vi dev.c
根据使用的spi找到对应的结构体,如qspi:
static struct flash_platform_data nuc980_qspi0_flash_data = {#if defined(CONFIG_BOARD_IOT) || defined(CONFIG_BOARD_ETH2UART) || defined(CONFIG_BOARD_LORAG).name = "mt29f",
#else.name = "m25p80",
#endif.parts = nuc980_qspi0_flash_partitions,.nr_parts = ARRAY_SIZE(nuc980_qspi0_flash_partitions),.type = "mx66l51235l",
};
将type改为需要的型号,注意此处修改需保证是在上面结构体m25p_ids[]中存在的:
.type = "w25q128",
还可以对MTD的分区进行修改:
/* SPI */
#if defined(CONFIG_SPI_NUC980_QSPI0) || defined(CONFIG_SPI_NUC980_QSPI0_MODULE)
/* spi device, spi flash info */
#ifdef CONFIG_MTD_M25P80
static struct mtd_partition nuc980_qspi0_flash_partitions[] = {#if defined(CONFIG_BOARD_ETH2UART){.name = "lighttpd",.size = 0x0200000,.offset = 0x0C00000,},
#elif defined(CONFIG_BOARD_CHILI) /* chili board spi flash total 32Mbyte*/{.name = "kernel", /* uboot, kernel 20Mbyte*/.size = 0x1400000,.offset = 0,},{.name = "rootfs", /* kernel 12Mbyte*/.size = 0x0c00000,.offset = 0x1400000,},
#else{.name = "kernel",.size = 0x0400000,.offset = 0,},{.name = "rootfs",.size = 0x0400000,.offset = 0x0400000,},
#endif
};
我根据现实情况,将其改为:
#else{.name = "uboot",.size = 0x0200000,.offset = 0,},{.name = "kernel",.size = 0x0800000,.offset = 0x0200000,},{.name = "rootfs",.size = 0x0400000,.offset = 0x0a00000,},
#endif
上面程序中还需要注意在初始化配置时使用的是厂商提供的哪一个config文件,如程序中这一段:
#if defined(CONFIG_BOARD_IOT) || defined(CONFIG_BOARD_ETH2UART) || defined(CONFIG_BOARD_LORAG).name = "mt29f",
#else.name = "m25p80",
我在初始化配置是使用的是nuvoton_nuc980_defconfig,而非nuvoton_nuc980_chili_defconfig或nuvoton_nuc980_eth2uart_defconfig,所以按上述修改,请根据自身设置来修改。
修改完成后,保存,make,烧录uimage。
测试
串口工具连接后,可以看到/dev中已经存在设置好的三个分区:
也可以通过如下命令查看更具体的信息:
参考文档:
官方文档—NUC980 Linux 4.4 BSP User Manual
新唐NUC980spi与nor-flash(w25q128)通信配置相关推荐
- H7-TOOL脱机烧录器支持1拖4,支持新唐,GD32,MM32,AT32,APM32,CX32,STM32,STM8,i.MX RT,W7500,外置Flash等2020-10-27
大家在使用中,有什么建议,欢迎反馈. 脱机烧录视频效果展示: http://v.qq.com/x/page/p30628h2ou7.html 多款STM8+STM32产品混合烧录展示: http:// ...
- 新唐单片机使用Keil下载出现*** Error: Flash Verify Failed at 0x00xx(错误码不固定)已解决(但未完全解决)
这个问题未根本解决,只是找到关闭报错的方法 文章目录 错误现象: 解决办法 错误现象: 首先是弹出提示框:[Flash下载失败] 编辑框也有对应错误详细信息,每次烧录错误信息不固定: 或者 再或者 可 ...
- 新唐芯片学习笔记——概要
##新唐芯片学习笔记--概要 特性 编号信息列表与管脚定义 NuMicroNUC029 命名规则 特性 ARM®Cortex®-M0 内核 – 运行频率可达50MHz – 一个 24位系统定时器 – ...
- m031开发 新唐_M031 系列
新唐NuMicro® M031 系列是基於 Arm® Cortex®-M0 CPU 的 32 位微控制器,具有 32 位硬體乘法器/除法器,1.8V~3.6V 的工作電壓,支持 5V I/O,可在 - ...
- n76e885_新唐N76E003,N76E616烧录,调试各种问题集【坑集】
新唐N76E003,N76E616烧录,调试各种问题集[坑集] 芒果 • 2018 年 10 月 24 日 这篇博文用来记录学习新唐单片机时遇到的问题以及解决的过程和方法.当然也有各种坑. 希望这篇文 ...
- 芯唐语音识别_大联大品佳推出基于新唐科技ISD9160+Cyberon算法的语音识别方案
致力于亚太地区市场的领先半导体元器件分销商---大联大控股宣布,其旗下品佳推出基于新唐科技(Nuvoton)ISD9160+Cyberon算法的语音识别方案,此方案可支持20条本地的语音命令,还可外挂 ...
- m031开发 新唐_M031
特性特点 新唐NuMicro® M031 系列是基于 Arm® Cortex®-M0 CPU 的 32 位 微控制器,具有 32 位硬件乘法器/除法器, 1.8V ~ 3.6V 的工作电压,支持 5V ...
- 单片机单口不可用或被占用_新唐单片机代码评审总结
昨晚上,我们一个同事组织了一个小会议,大家一起讨论了一个项目的单片机代码,这个单片机用的是新唐单片机,期间大家也讨论了一些问题,总结一下,希望对写单片机的同学们有帮助. 我这个同事写的代码非常优秀,具 ...
- idata 单片机 新唐_【nuvoton新唐8051单片机】NuTiny-SDK-N76E003开发板
型号:NuTiny-SDK-N76E003 内核架构:8-bit 产品简介: N76E003为新唐高速1T 8051 单片机系列产品,提供18 KB Flash ROM.可配置Data Flash与高 ...
最新文章
- poj1182(食物链)续
- Win7下Anaconda3+Tensorflow
- PyTorch深度学习实践02
- 区块链每日一问 | 数字货币的场内交易和场外交易各指什么?各有哪些特点?...
- Best Coder Lotus and Characters
- Seata多微服务互相调用_全局分布式事物使用案例_Order-Module order微服务的配置搭建---微服务升级_SpringCloud Alibaba工作笔记0060
- linux .bashrc文件修改和生效
- html 放上去动画停止,使用jQuery的animate()+CSS样式实现动画效果及stop()停止动画
- 试题 基础练习 字母图形 java代码
- MAC 安装 kafka
- ActiveMQ--CVE-2015-5254
- python热力图_一、python可视化——热力图
- 【Python】多进程 AttributeError: Can‘t pickle local object
- 【SEED Labs 2.0】ICMP Redirect Attack Lab
- response.buffer用法
- 线性规划第一阶段入基变量和出基变量选择的细节讨论
- 如何理解D触发器延迟一拍
- python计算器gui设计_Python 计算器界面设计
- oracle权限培训,【必看】Oracle用户、权限、角色管理
- MybatisPlus 分页排序封装