LinuxGod

LinuxGod.net
Linux大神网——精选每一篇高品质的技术干货
  1. 首页
  2. 开源快讯
  3. 正文

驱动模板修改MX25L1606E与m25pxxSPIFLASH存在的区别:修改m25pxx.c文件

2023年4月23日 411点热度

本节主要介绍串行SPIflash驱动的移植。eCos中,flash支持比较健全,移植flash驱动也不是件难事。虽然这么suse linux 下载,在本次移植spi插口flash时,还是遇见了一些意外问题,但是正是因为这个意外问题,让我解决了在移植STM32ADC驱动时碰到的一个棘手问题:

只要我在eCos图形配置工具中打开了ADC的任何一个通道,则不能生成正常的bin格式映像文件(生成的bin文件超大,大小达到了不可思议的1.2GB大小,但可生成正常的srec格式映像文件);若果不打开ADC任何一个通道,则可以输出正常的bin格式文件。其实这个问题旁边用暴力解决了,但问题缘由没有厘清楚,所以仍然悬在心中。

选择SPIflash驱动模板

最新eCos代码支持3种系列类型SPIflash,分别是:at25dfxxx、m2525pxx和sst25xx。为简化移植,按照使用的SPIFLASH芯片,从这3个系列中选择一个在命令、SPI时序、存储结构等参数上比较接近的SPIFLASH驱动作为模板,之后在此基础上进行更改。我板子上使用的SPIFLASH为MX25L1606E,16Mbits大小,它与m2525pxx系列特别接近,如右图所示。故选用m2525pxxSPIFLASH驱动作为模板linux 9x25 spi驱动移植,在此基础上进行一些简单更改。

image

驱动模板更改

MX25L1606E与m2525pxxSPIFLASH存在的区别:

针对里面的区别,更改m25pxx.c文件:

更改Sectorerase命令的定义北京linux培训,即更改宏M25PXX_CMD_SE对应的值为0x20:

linux spi转串口驱动_linux spi驱动框架_linux 9x25 spi驱动移植

typedef enum m25pxx_cmd {
  M25PXX_CMD_WREN  = 0x06,  // Write enable.
  M25PXX_CMD_WDRI  = 0x04,  // Write disable.
  M25PXX_CMD_RDID  = 0x9F,  // Read identification.
  M25PXX_CMD_RDSR  = 0x05,  // Read status register.
  M25PXX_CMD_WRSR  = 0x01,  // Write status register.
  M25PXX_CMD_READ  = 0x03,  // Read data.
  M25PXX_CMD_FREAD = 0x0B,  // Read data (fast transaction).
  M25PXX_CMD_PP    = 0x02,  // Page program.
  M25PXX_CMD_SE    = 0x20,  //0xD8,  // Sector erase. // Modified for MX25L1606E by reille 2013.05.26
  M25PXX_CMD_BE    = 0xC7,  // Bulk erase.
  M25PXX_CMD_RES   = 0xAB,  // Read electronic signature.
} m25pxx_cmd;

更改flash对应的每位sector包含的page数目、总sector数以及jedecid,即更改m25pxx_supported_devices数据中对应flash大小的flash参数:

  { // Support for Numonyx 16 MBit devices.
    sector_size  : 16, // 256, // Modified for MX25L1606E by reille 2013.05.26
    sector_count : 512, // 32, // Modified for MX25L1606E by reille 2013.05.26
    jedec_id     : 0x00C22015, // 0x00202015 // Modified for MX25L1606E by reille 2013.05.26
  },

添加flash驱动实例

里面只是完成了SPIFLASH驱动,只有驱动是不行的,还要在target模板中构建一个SPIFLASH驱动实例。

打开ecos/packages/hal/cortexm/stm32/stm32f10xxx/current/src/stm32f0xxx_flash.c文件(stm3232ff1010xxx是我使用的target,所以实际中要更改为你使用的target),在这个文件中添加一个SPIFLASH驱动实例:

// Add SPI FLASH | added by reille 2013.05.26
#ifdef CYGPKG_DEVS_FLASH_SPI_M25PXX
#include 
//-----------------------------------------------------------------------------
// Set up the SPI intertface on the ST STM32F10XXX board for the STM32.  The
// M25PXX device is connected to SPI bus 1. SPI1 should be set up in configtool
// so that chip select 1 corresponds to GPIO number 18 (PB2) and 50MHz I/O is
// enabled.  If the data area is in external RAM, SPI1 must be configured with
// bounce buffers of at least 256 bytes and the M25PXX read data block size
// should be set to the same size as the bounce buffers.
#ifdef CYGPKG_HAL_CORTEXM_STM32_STM32F10XXX
#include 
CYG_DEVS_SPI_CORTEXM_STM32_DEVICE (
    m25pxx_spi_device, 1, 0, false, 0, 0, 25000000, 1, 1, 1
);
#endif
//-----------------------------------------------------------------------------
// Instantiate the M25Pxx device driver.
CYG_DEVS_FLASH_SPI_M25PXX_DRIVER (
    m25pxx_flash_device, 0x65000000, &m25pxx_spi_device
);
#endif  /* CYGPKG_DEVS_FLASH_SPI_M25PXX */

非常注意里面的英语注释,这个须要使用图形配置工具配置相应的参数,见下边所述。

linux spi驱动框架_linux spi转串口驱动_linux 9x25 spi驱动移植

另外,在stm32f0xxx_flash.c文件,我们可以看见,这儿还定义了NORFLASH实例。

STM32SPI驱动和SPIFLASH驱动配置

依据添加驱动实例时的注释信息,当程序在外部RAM中运行时,须要配置STM32SPI驱动的Bouncebuffersize和SPIFLASH驱动的Maximumreadblocksize,如右图所示:

image

上述弄好后,重新编译得到映像文件。

生成bin格式映像文件问题

十分奇怪,这时生成的bin格式映像文件异常,大小只有4KB大小linux 9x25 spi驱动移植,这让我联想到了先前移植STM32ADC驱动出现的问题,详见:stm32移植ecos#17,ADC驱动和应用编程(上)和stm32移植ecos#18,ADC驱动和应用编程(下)。

为解决这个问题,当初花了不少时间,但都没能解决。本次,还写了一封E-mail到eCos的discuss电邮列表,寻求帮助,遗憾的是,没有人给我解答。不得以,自己想办法解决它,但是也解决了,请看下节。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: flash flash芯片 spi spi接口 stm32
最后更新:2023年4月23日

Linux大神网

每日更新,欢迎收藏♥ 不积跬步无以至千里,加油,共勉。

点赞
< 上一篇
下一篇 >

Linux大神网

每日更新,欢迎收藏♥
不积跬步无以至千里,加油,共勉。

最新 热点 随机
最新 热点 随机
ubuntu离线安装软件 鸿蒙OS环境搭建过程中遇到的问题及解决方案 写入数据覆盖的分析与执行 解读Rainbond集群的安装和运维的原理,便于用户搭建Rainbond Linux基础知识:文件描述符、文件指针、索引节点 如何解决Linux下的无线网卡驱动的问题? linux 文件描述符 (师)-unused-fdKernel:2.6.14CPUarchitecture Linux系统下如何搭建SVN服务器,详细说明各配置项的功能 修改软件源文件、UI界面设置换源操作|Ubuntu Ubuntu14.04.2为例进行说明,其它Ubuntu版本与此类似 Linux图形界面用户和Windows用户来说获取系统硬件信息都不算问题 Ubuntu下换内核的过程及详细分析内核操作分析 100篇文章内存管理——内存回收入口 Web站点,utsa,,/usp/为读者提供大量资料 Linux内核源码/内存/文件系统/进程管理/设备 TeXLive和MiKTeX两大主要发行版的镜像配置方法 安全增强式Linux(SELinuxLinux)内核修改和用户空间工具 Ubuntu系统下安装字体和切换默认字体的方法系统 896MB如何转换为物理空间(Linux地址映射的分析) 比较流行的Linux系统图形界面环境-Linux社区创作挑战赛 如何查看Linux硬盘的大小、类型和硬件信息?方法
ubuntu离线安装软件 鸿蒙OS环境搭建过程中遇到的问题及解决方案Android官方网站:OpenHandsetAlliance源码模式:开发源码内核linux中makefile文件 cdeveloper的第21篇原创技术文章建议横屏Makefile简介Fedora17新特色特色说明桌面环境28bata集成了GNOMELinux嵌入式系统智能手机系统的硬件设计Unix或者类Unix文件系统中的每个文件(或者目录)打开U盘什么文件都看不到小编总结了基于嵌入式Linux的智能手机系统软件的设计与实现如何在Linux中使用Firejail运行应用程序访问某个目录基于嵌入式��闹悄苁只�长沙理工大学C语言教程-Qt.12安装教程05-27Linux有7个运行级别(关机,停机模式、DellG3)(Linux基础知识)文件压缩、打包命令解析的Linux操作系统怎样执行?LinuxDNS服务器,如何安装、配置和维护它?AMD2950x+技嘉x399免驱USB网卡,我的无线网卡linux解压gz文件命令 蓝易云香港五网CN2网络压缩比率的测试环境Linux系统中用于管理和控制系统服务的强大工具介绍围绕API创建封装器的开源项目正变得越来越流行主频93.75MHz的MIPS64NECVR4300处理器在N64上运行
文件计算系统运行时间及概念分析(2015.4.1) 豆瓣高评分书籍,快来看看你都读过哪几本? 轻松掌握:如何查询Linux内核版本? home/ftproot/scb添加权限,你的第一个要求是什么? Ubuntu下安装nvidia显卡驱动获取显卡的型号图 一段程序是告诉计算机应该如何完成一个任务的程序 如何在Linux的命令行中使用speedtest-cli来测试宽带连接速度 2.5创建和配置虚拟机2.5.1创建虚拟机双击桌面的VMwarePlayer 红旗Linux推出新版本:界面设计媲美Windows Linux下的安装zip解压功能及安装unzip教程 Linux自主访问控制机制模块详细分析:网络安全标准资料 一下远程syslogd的配置及应用 Linux内核开机启动程序详解(一):加载加载程序 个人常用的Linux一键安装Aria2+YAAW实现离线下载帮助 本发明可动态检测C/C++内存泄露的方法,所述方法 Linux系统的修改权限与默认权限的分类及处理方法 linux扩容知识储备如何对linux系统:history查看linux操作 mputrose,并改名为333bmp文件传送至服务器 什么是Windows系统MicrosoftWindows,linux系统和windows系统的区别 (Unix)Unix时间戳转换公式及Unix操作成时间公式
标签聚合
sudo 软件 linux服务器 linux系统 linux脚本 命令 电脑 文件目录 命令模式 虚拟机
书籍
课程
技术群
技术干货大合集↓
  • 2023年6月 / 17篇
  • 2023年5月 / 93篇
  • 2023年4月 / 90篇
  • 2023年3月 / 129篇
  • 2023年2月 / 84篇
  • 2023年1月 / 161篇
  • 2022年12月 / 187篇
  • 2022年11月 / 76篇
友情链接:

Linux书籍 | Linux命令 | Linux系统 | RHCE红帽认证 | Linux软件 | Linux教程 | CentOS系统 | Linux内核 | Linux服务器 | Linux大神 | IT资源

COPYRIGHT © 2023 linuxgod.net ALL RIGHTS RESERVED.