选取MX25L25635F作为调试对象,其他型号的NorFlash开发调试原理基本一致。为了使V3/V3s/S3/S3L识别32MB NorFlash并正常工作,主要针对以下三个部分进行开发和调试。下文将针对这三个部分的开发进行说明。

  1. U-Boot
  2. Linux Kernel
  3. System Configuration

第一部分,U-boot

原始的SDK包支持3线模式,但没有支持4线模式,因此,必须在引导过程中加入4线模式。简单解释一下,3线模式是指NorFlash支持3x8位地址线,可以访问的地址空间是16MB(2^24/1024/1024),4线模式支持4x8位地址线,可以访问比16MB大的地址空间。找到源码文件drivers/spinor/sunxi_spinor.c,增加4线模式的使能函数。

static void spinor_enter_4bytes_addr(int enable)
{
int command = ;
if(spinor_4bytes_addr_mode == && enable == )
command = 0xB7;
else if(spinor_4bytes_addr_mode == && enable == )
command = 0xE9;
else
return ;
#ifdef CONFIG_ARCH_SUN8IW8P1
spic_config_dual_mode(, , , );
#endif
spic_rw(, (void*)&command, , );
return;
}

需要注意的是,0xB7和0xE9不代码所有32MB NorFlash的4线模式进入/退出命令,应从datasheet中获取相应的命令值。接下来,找到spinor_init函数,回复flash size大于16MB的处理。

if(spi_size > **/)
{
spinor_4bytes_addr_mode = ;
spinor_enter_4bytes_addr(ENABLE_4BYTES);
}

找到NorFlash读写函数__spinor_pp和__spinor_sector_normal_read,增加4线模式的数据读写代码片段。

------------写
if(spinor_4bytes_addr_mode == )
{
txnum = len+;
sdata[] = SPINOR_PP;
sdata[] = (page_addr >> ) & 0xff;
sdata[] = (page_addr >> ) & 0xff;
sdata[] = page_addr & 0xff;
memcpy((void *)(sdata+), buf, len);
}
else if(spinor_4bytes_addr_mode == )
{
txnum = len+;
sdata[] = SPINOR_PP;
sdata[] = (page_addr >> ) & 0xff;
sdata[] = (page_addr >> ) & 0xff;
sdata[] = (page_addr >> ) & 0xff;
sdata[] = page_addr & 0xff;
memcpy((void *)(sdata+), buf, len);
}
------------读
if(spinor_4bytes_addr_mode == )
{
txnum = ;
sdata[] = SPINOR_READ;
sdata[] = (page_addr >> ) & 0xff;
sdata[] = (page_addr >> ) & 0xff;
sdata[] = page_addr & 0xff;
}
else if(spinor_4bytes_addr_mode == )
{
txnum = ;
sdata[] = SPINOR_READ;
sdata[] = (page_addr >> ) & 0xff;
sdata[] = (page_addr >> ) & 0xff;
sdata[] = (page_addr >> ) & 0xff;
sdata[] = page_addr & 0xff;
}

最后需要在spinor_datafinish_card函数最后退出4线模式,这样做,刷机结束后,系统启动时才可以正确得到boot0,否则会重复刷机。

第二部分,Linux Kernel

内核部分的修改比较简单,在NorFlash设备驱动drivers/mtd/devices/m25p80.c中加入针对MX25L25635F这款32MB NorFlash的支持,如下:

--- a/drivers/mtd/devices/m25p80.c
+++ b/drivers/mtd/devices/m25p80.c
@@ -, +, @@ static const struct spi_device_id m25p_ids[] = {
{ "mx25l1606e", INFO(0xc22015, , * , , SECT_4K) },
{ "mx25l3205d", INFO(0xc22016, , * , , ) },
{ "mx25l6405d", INFO(0xc22017, , * , , ) },
- { "mx25l12805d", INFO(0xc22018, , * , , ) },
+ { "mx25l12805f", INFO(0xc22018, , * , , ) },
{ "mx25l12855e", INFO(0xc22618, , * , , ) },
{ "mx25l25635e", INFO(0xc22019, , * , , ) },
{ "mx25l25655e", INFO(0xc22619, , * , , ) },
@@ -, +, @@ static int __devexit m25p_remove(struct spi_device *spi)
} +static int m25p_shutdown(struct spi_device *spi)
+{
+ struct m25p *flash = dev_get_drvdata(&spi->dev);
+ const struct spi_device_id *id = spi_get_device_id(spi);
+ struct flash_info *info;
+ printk("m25p: spinor shutdown\n");
+
+ if(flash->addr_width == )
+ {
+ info = (void *)id->driver_data;
+ set_4byte(flash, info->jedec_id, );
+ }
+ return ;
+}
+
+
static struct spi_driver m25p80_driver = {
.driver = {
.name = "m25p80",
@@ -, +, @@ static struct spi_driver m25p80_driver = {
.id_table = m25p_ids,
.probe = m25p_probe,
.remove = __devexit_p(m25p_remove),
+ .shutdown = m25p_shutdown, /* REVISIT: many of these chips have deep power-down modes, which
* should clearly be entered on suspend() to minimize power use.

第三部分,System Configuration

V3/V3s/S3/S3L这4个平台的SDK里面,U-Boot和Kernel都会调用sys_config.fex的Nor配置,需要将Nor Flash的大小修改成32,意思是32MB。

@@ -, +, @@ max_speed_hz  =
bus_num =
chip_select =
mode =
-sflash_size =
+sflash_size =

完成上述三个环节的修改以后,依次编译U-Boot,Linux Kernel,最后打包Firmware,烧录到设备。

在全志V3/V3s和索智S3/S3L上调试32MB NorFlash的更多相关文章

  1. 将日志备份推送到s3存储上

    1.将日志备份推送到s3存储上 #!/bin/sh # 此脚本实现将/usr/local/netqin/boss/netqin/logs/BOSS_ContentServer/BOSS_AD_SDK ...

  2. aws s3文件上传设置accesskey、secretkey、sessiontoken

    背景: 最近跟进的项目会封装aws S3资源管理细节,对外提供获取文件上传凭证的API,业务方使用获取到的凭证信息直接请求aws进行文件上传.因此,测试过程需要验证S3文件上传的有效性.aws官网有提 ...

  3. 亚马逊S3下载上传文件

    引用网址: http://www.jxtobo.com/27697.html 下载 CloudBerry Explorer http://www.cloudberrylab.com/download- ...

  4. .NET快速信息化系统开发框架 V3.2->Web版本新增“文件管理中心”集上传、下载、文件共享等一身,非常实用的功能

    文件中心是3.2版本开始新增的一个非常实用功能,可以归档自己平时所需要的文件,也可以把文件分享给别人,更像一个知识中心.文件中心主界面如下图所示,左侧“我的网盘”展示了用户对文件的分类,只能自己看到, ...

  5. AWS S3 递归上传文件和递归下载文件, 以及S3之间拷贝文件夹

    1. 递归上传文件: aws s3 cp 本地文件夹 s3://bucket-name -- recursive --region us-east-1 2. 递归下载S3上的文件夹: cd  本地下载 ...

  6. Java连接S3并上传Redis

    package com.shinho.bigdatalake.redis; import com.amazonaws.regions.Region; import com.amazonaws.regi ...

  7. storj白皮书v3最全面解读,Docker创始人的加入能否扳倒AWS S3

    Storj新发了白皮书v3,地址是:https://storj.io/storjv3.pdf. 这次白皮书一共有90页,看完还真要费不少时间.如果你没有时间看,可以看一下我这篇快速技术解读. 上次St ...

  8. 小白自制Linux开发板(第二季 V3s篇) 一. 换个核心再来一次

    1.前言 大家心心念念(个人认为)的小白自制开发板全新系列正式来了,之前我们使用全志的F1C200s芯片制作了一个小电脑,众所周知,调试很艰难,坑也很多,以至于墨云到现在还是没找到对应的补救方案,为了 ...

  9. NetworkComms V3 之同步收发数据

    NetworkComms网络通信框架序言 NetworkComms通信框架,是一款来自英国的c#语言编写的通信框架,历时6年研发,成熟稳定,性能可靠. NetworkComms v3的核心功能在一定程 ...

随机推荐

  1. ionic项目编译打包(android平台)

    ionic项目相关开发工作完成之后(建立ionic工程项目可以参考上一篇文章ionic项目工程建立),就可以进行项目的编译打包apk应用包. 打包编译需要在平台环境下,这里只记录下android平台打 ...

  2. Visual Staudio 2015 打开指定文件,定位到指定文件目录下

    Visual Staudio 2015 项目定位文件位置 每次使用的Visual Staudio 2015 写代码的时候总是打开了.cs文件或xaml文件时, 还要手动去找该 文件位置,每次都要翻好大 ...

  3. Python 爬虫练手项目—酒店信息爬取

    from bs4 import BeautifulSoup import requests import time import re url = 'http://search.qyer.com/ho ...

  4. [翻译] ZFTokenField

    ZFTokenField 本人视频教程系类   iOS中CALayer的使用 效果图: iOS custom view that let you add token view inside like ...

  5. HTML IMG标签SRC为null

    今天做项目遇到一个错 研究了半天才发现 其实就是一个小错 稍微注意一下 就能规避 HTML标签<img src="null">这种情况下在chrom的debug下就会报 ...

  6. VS 2012 在 windows 8 中无法使用 Deubgger.Lunch() 对服务进行调试

    找到了外文资料:   Debugger.Launch() not displaying JIT debugger selection popup on Windows 8/8.1   If execu ...

  7. OpenStack高可用方案及配置

    1  OpenStack高可用介绍 1.1  无状态和有状态服务 无状态服务指的是该服务接收的请求前后之间没有相关关系,接收并处理完该请求后不保存任何状态,在OpenStack的服务中常见的无状态服务 ...

  8. python一键对应多个值

    背景:目前是想让一个取出来的数据,数据有2个或多个值,对应一个key,或者这样说:让一个键对应2个值或者3个值 实现方式,如下:目前我以读取xml文件为案例,读取xml中两个配置文件,存放到一个key ...

  9. 【转+修改】容联云通讯api调用短信发送调用

    转自   https://my.oschina.net/u/1995134/blog/814540 需要荣联云通讯 的 相对应SDKjar包. CCP_REST_SMS_SDK_JAVA_v2.6.3 ...

  10. POJ3041 Asteroids(匈牙利算法)

    嘟嘟嘟 虽然我已经会网络流了,但是还是学了一个匈牙利算法. --就跟我会线段树,但还是学了树状数组一样. 其实匈牙利算法挺暴力的.简单来说就是先贪心匹配,然后如果左部点\(i\)匹配不上了,就尝试更改 ...