在全志V3/V3s和索智S3/S3L上调试32MB NorFlash
选取MX25L25635F作为调试对象,其他型号的NorFlash开发调试原理基本一致。为了使V3/V3s/S3/S3L识别32MB NorFlash并正常工作,主要针对以下三个部分进行开发和调试。下文将针对这三个部分的开发进行说明。
- U-Boot
- Linux Kernel
- 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的更多相关文章
- 将日志备份推送到s3存储上
1.将日志备份推送到s3存储上 #!/bin/sh # 此脚本实现将/usr/local/netqin/boss/netqin/logs/BOSS_ContentServer/BOSS_AD_SDK ...
- aws s3文件上传设置accesskey、secretkey、sessiontoken
背景: 最近跟进的项目会封装aws S3资源管理细节,对外提供获取文件上传凭证的API,业务方使用获取到的凭证信息直接请求aws进行文件上传.因此,测试过程需要验证S3文件上传的有效性.aws官网有提 ...
- 亚马逊S3下载上传文件
引用网址: http://www.jxtobo.com/27697.html 下载 CloudBerry Explorer http://www.cloudberrylab.com/download- ...
- .NET快速信息化系统开发框架 V3.2->Web版本新增“文件管理中心”集上传、下载、文件共享等一身,非常实用的功能
文件中心是3.2版本开始新增的一个非常实用功能,可以归档自己平时所需要的文件,也可以把文件分享给别人,更像一个知识中心.文件中心主界面如下图所示,左侧“我的网盘”展示了用户对文件的分类,只能自己看到, ...
- AWS S3 递归上传文件和递归下载文件, 以及S3之间拷贝文件夹
1. 递归上传文件: aws s3 cp 本地文件夹 s3://bucket-name -- recursive --region us-east-1 2. 递归下载S3上的文件夹: cd 本地下载 ...
- Java连接S3并上传Redis
package com.shinho.bigdatalake.redis; import com.amazonaws.regions.Region; import com.amazonaws.regi ...
- storj白皮书v3最全面解读,Docker创始人的加入能否扳倒AWS S3
Storj新发了白皮书v3,地址是:https://storj.io/storjv3.pdf. 这次白皮书一共有90页,看完还真要费不少时间.如果你没有时间看,可以看一下我这篇快速技术解读. 上次St ...
- 小白自制Linux开发板(第二季 V3s篇) 一. 换个核心再来一次
1.前言 大家心心念念(个人认为)的小白自制开发板全新系列正式来了,之前我们使用全志的F1C200s芯片制作了一个小电脑,众所周知,调试很艰难,坑也很多,以至于墨云到现在还是没找到对应的补救方案,为了 ...
- NetworkComms V3 之同步收发数据
NetworkComms网络通信框架序言 NetworkComms通信框架,是一款来自英国的c#语言编写的通信框架,历时6年研发,成熟稳定,性能可靠. NetworkComms v3的核心功能在一定程 ...
随机推荐
- Azure Linux 虚拟机常见导致无法远程的操作
对Azure虚拟机的一些操作可能会导致无法远程连接,本文罗列了以下导致不能远程连接的场景: 场景1 - 在虚拟机配置IP地址或MAC地址 场景2 - 错误地修改服务的配置文件 场景3 - 误设置防火墙 ...
- Linux 配置samba服务实现与Windows文件共享
目录: 1.samba服务介绍 2. 安装samba服务和客户端 3.samba配置文件详解 4.配置实例 5.客户端挂载与测试 6.samba排错 1.Samba服务介绍 Samba 最先在 ...
- mysql_fetch_row,mysql_fetch_array,mysql_fetch_object,mysql_fetch_assoc
php从mysql中访问数据库并取得数据,取得结果的过程中用到好几个类似的方法,区别及用法值得区分一下,看下面的代码 代码如下: <?php $link=mysql_connect('local ...
- codeforces 549F Yura and Developers(分治、启发式合并)
codeforces 549F Yura and Developers 题意 给定一个数组,问有多少区间满足:去掉最大值之后,和是k的倍数. 题解 分治,对于一个区间,找出最大值之后,分成两个区间. ...
- 深入理解php中的ini配置(2)
继续接着上一篇写. 运行时改变配置 在前一篇中曾经谈到,ini_set函数可以在php执行的过程中,动态修改php的部分配置.注意,仅仅是部分,并非所有的配置都可以动态修改.关于ini配置的可修改性, ...
- H3C笔试题目
最近这段时间正在找工作,去H3C做了下笔试题,题目出的还不错,比一般公司水平高上一点点,偷偷弄了点回来,分享一下,我把答案和解析全部整理了出来,有需要的可以看看. 1.以下描述正确的有(AD) A.1 ...
- JavaScript 数组遍历方法的对比
JavaScript 发展至今已经发展出多种数组的循环遍历的方法,不同的遍历方法运行起来那个比较快,不同循环方法使用在那些场景,下面将进行比较: 各种数组遍历的方法 for 语句 ,,,] , len ...
- python新建以时间命名的目录
1.新建三级目录,第一级是去年的年份,第二级是去年的月,第三级为去年的日,在日的文件中写入今年的时分秒 import os import time import shutil def create_f ...
- 匹配IP的正则表达式
正则表达式匹配IP 1 ((25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)\.){3}(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|[1-9])
- PhoneGap模仿微信摇一摇功能
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...