原flash: SAMSUNG K9K8G08U0B

新flash:SPANSION  S32ML08G201TF100

简单介绍:

K9K8G08U0B与 S32ML08G201TF100很相似,都是8Gbits,页大小都是2048bytes

但K9K8G08U0B的SPARE AREA为每页64B,S32ML08G201TF100为128B

问题是这样的:

1.生产了50块板,这些板都是用的新flash,但程序烧录的却是老flash的程序

板子全都起不来

2.板子起不来,就想着通过JTAG(BDI3000)引导ram版的uboot,然后将程序写入nand,但bdi检查不通过,表示cpu已经跑飞了...

问题分析:

1.按道理讲,通过JTAG load起来的ram uboot将uboot的原始程序通过nand write往nand写的时候,是有计算校验的,
我的意思是这个校验是cpu加上的,尽管nand不同,但写入的数据是一样的。通过烧写器(希尔特6100)将芯片内容读出对比也确实证明了这一点。
数据完全一样,新flash却起不来。
冷静思考解决办法,通过修改烧录器的配置字参数,终于有一片flash,bdi可以检查通过,ram uboot跑起来了。
通过nand dump命令查看flash的内容,发现!!!
发现第一页数据都正常,但是第二页却出现了偏差,数据前移了64B,正好卡上下面这张图
道理就是这样,S32ML08G201TF100有128B的SPARE AREA,校验虽然只有64B,但后面的数据会继续填满这128B,这就导致再后面的数据每页往前移动64B
2.按道理来讲,bdi可以配置target(也就是cpu)reset后立刻挂起,进入debug模式,既然reset后等在那,说明cpu什么也没有执行,怎么会跑飞呢?
将芯片格了,bdi就OK了,果然跟数据有关,也就是说,cpu上电或bdi进行reset,cpu是会执行nand中的代码的。
后来想到,毕竟是nand,cpu的nand控制器定会自动将nand的前4K load到SRAM的,然后CPU会小跑一段?
那只能来硬的了,查看cpu手册,将cpu的上电启动改了
原来cpu本身就支持多种上电启动,有ram,nand,reserve...
暂时将cpu的上电改为reserve,bdi可以识别,也可以烧录。
解决办法:
在原来数据基础上在每4K+64后面插入64字节的0xff 这样就适配了新nand的结构
代码如下
/*
*  COPYRIGHT NOTICE
*  Copyright (C) 2016 HuaHuan Electronics Corporation, Inc. All rights reserved
*
*  Author               :Kevin_fzs
*  File Name            :/home/kevin/works/projects/ACCUMULATION/C_Program/addOob/addoob.c
*  Create Date          :2016/07/21 16:18
*  Last Modified        :2016/07/21 16:18
*  Description          :
*/#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main(int argc, char *argv[])
{FILE *fd1, *fd2;char new[70] = {0}, *buf = NULL;int len = 0;if(argc<2){printf("Please input pof name");return 0;}printf("file is %s\n",argv[1]);sprintf(new, "%s-spansion.filebin",argv[1]);if((fd1 = fopen(argv[1],"rb"))==NULL){printf("open %s error\n", argv[1]);;return 0;}if((fd2 = fopen(new,"wb"))==NULL){printf("open %s error\n", new);;return 0;}printf("processing..\n");if(NULL == (buf = malloc(2048+200))){printf("malloc failed..\n");return 0;}memset(buf, 0xff, sizeof(buf));while((len = fread(buf, 1, (2048+64), fd1))>0){memset(buf+(2048+64), 0xff, 64);fwrite(buf, 1, (2048+128), fd2);memset(buf, 0xff, sizeof(buf));}free(buf);fclose(fd1);fclose(fd2);printf("OK..\n");return 0;
}
附:给领导的文档

关于新flash芯片SPANSION S32ML08G201TF100,烧录进程序后,设备无法启动问题

问题分析

芯片特性差异:

老芯片 SAMSUNG K9K8G08U0B 的PAGE大小为 (2048+64) bytes

新芯片S32ML08G201TF100的PAGE大小为(2048+128) bytes

差异部分为SPARE AREA区域,也就是存放ECC校验的区域

CPU方面仍然按(2048+64) bytes大小提取程序,烧录器按(2048+128) bytes烧录

导致程序烧录进去后按每个PAGE向前移动64 bytes,程序乱了板子也就起不来了。

解决办法

按照新芯片的特性,将提取到的程序在每(2048+64) bytes后填充64bytes的校验,补齐到(2048+128) bytes。经过特殊处理后的程序验证通过

注意:新老芯片页大小不同,最终的离线烧录程序不同

由于已经烧录过的芯片,bdi3000无法识别,只能将芯片取下,重新烧录后,再将芯片焊上

烧录器配置

烧录时间:烧录一块芯片的时间大约为25秒

烧录器配置:

器件配置字:

NAND flash替换问题相关推荐

  1. linux提高nand速度,linux-2.6.31.1内核支持Nand Flash

    linux-2.6.31.1支持Nand Flash 目的:使NandFlash驱动同时支持64M, 256M或更高容量的NandFlash 将linux内核解压在/opt目录下,修改内核源码文件,添 ...

  2. Nand Flash基础知识与坏块管理机制的研究

    概述 Flash名称的由来,Flash的擦除操作是以block块为单位的,与此相对应的是其他很多存储设备,是以bit位为最小读取/写入的单位,Flash是一次性地擦除整个块:在发送一个擦除命令后,一次 ...

  3. OK6410 tftp下载内核、文件系统以及nand flash地址相关整理、总结

    飞凌官方提供了一键下载烧写linux的方式,相对来说比较方便,但是对于开发来说不够灵活,因此这篇文章把tftp相关的点介绍一下,整理下其中遇到的一些问题. 一键烧写本质上是启动位于SD卡中的Uboot ...

  4. jz2440开发板修改UBOOT支持NAND FLASH

    很多天没有看嵌入式的东西了,今天来看一下,继续之前移植uboot到jz2440开发板.今天我们来实现Uboot支持NAND FLASH. 在之前的文章里(点击连接查看之前的记录),我们为了编译通过把N ...

  5. uboot研读笔记 | 05 - 移植uboot 2012.04到JZ2440(支持Nand Flash读写)

    项目开源地址:https://github.com/Mculover666/uboot-jz2440 0. 教程完整目录 00 - 嵌入式Linux系统中Bootloader的作用和基本运行原理 01 ...

  6. Linux MTD架构下的nand flash驱动详解

    转载自:http://blog.csdn.net/wang_zheng_kai/article/details/18988521 有了前面的基础(Nandflash详解:https://blog.cs ...

  7. 嵌入式linux之Nor/Nand FLASH的读写

    http://www.cnblogs.com/tureno/articles/2708461.html 所谓Flash,是内存(Memory)的一种,但兼有RAM和ROM 的优点,是一种可在系统(In ...

  8. NAND FLash基础概念介绍

    @TOC一.引脚介绍 1. 命令.地址.数据都通过8个I/O口传输 2. 写命令.地址.数据时,都需要将WE.CE信号同时拉低 3. 数据在WE信号的上升沿被NAND Flash锁存 4. 命令锁存信 ...

  9. NOR和NAND Flash

    三星终于从爆炸门中走了出来,受到来自DRAM 与NAND 价格上涨带动,三星把Intel从盘踞了14年的半导体王座上赶了下来,风光可谓一时无两.虽然下半年市况预料将会修正,但今年整体DRAM 仍可较去 ...

最新文章

  1. R语言将多个dataframe导出到excel的多个表单(sheet)实战
  2. 动态规划解决方案最长公共子序列问题(开启)
  3. 中山市交通集团热备容灾项目成功案例
  4. 机器学习笔记(十六)强化学习
  5. mysql字符串区分大小写么_mysql字符串区分大小写的问题-阿里云开发者社区
  6. 初识React Native虚拟DOM节点及API
  7. 来自Yang Terry的关于SAP CRM One Order事件回调机制的分享
  8. 程序员必备技能-科学砍需求 1
  9. pytorch迁移学习--模型建立的代码实现
  10. 小学生python游戏编程7----角色精灵定义
  11. 详解如何设计一套健康体检信息管理系统
  12. 微积分-指数函数求导
  13. 数据字典的主要作用是什么?
  14. 解决THINKBOOK 14安装windows系统不识别固态硬盘的问题
  15. MySQL 8.0的预研清单和计划
  16. Python数据类型—数值型
  17. 比尔盖茨的15个预言,如今全已成真
  18. 从后端到前端的简陋博客开发
  19. linux c 开发数据,Linux c 开发
  20. 青云QingCloud黄允松:关于云计算未来的三个预测

热门文章

  1. 项目部署点一下按钮就可以,全流程自动化
  2. Ldap服务器搭建流程
  3. GitHub,力扣,电脑组成,ip地址。
  4. 实时天气及24小时天气预报
  5. 瑞幸才是真正的牛逼民族企业
  6. Bootstrap系列之徽章(Badge)
  7. 软件业预言:2012是传统软件的末日
  8. React Redux 与胖虎他妈
  9. 汇编语言 | 基础知识
  10. UE4 虚幻引擎,为自定义的植物添加“”风吹“”效果