使用JLink间接烧写S3C2410、S3C2440开发板Nor、Nand Flash的方法
- 格式:pdf
- 大小:587.87 KB
- 文档页数:19
如何用jlink烧写uboot到nandflash1.通过Nor Flash下载a. speed 12000 //设置TCK为12M,下载程序时会很快b. loadbin d:\u-boot.bin 0x30000000注意:0x30000000是你想要下载u-boot.bin到开发板的内存地址,内存地址根据不同的开发板设定不同,因为本文中使用的是FL2440,片上系统是S3C2440,内存挂载的地址区域是0x30000000~0x33ffffff,我们只需要把u-boot.bin下载到这片区域即可然后我们在U-boot命令行模式输入NAND Flash擦除和写入命令即可:c.nand erase 0 40000// 擦除从0地址开始的大小为0x40000的Nnad Flash扇区,0x40000是待写入的U-boot.bin的大致长度,长度必须为NAND Flash页大小的整数倍,通常会需要比u-boot.bin实际长度长。
d.nand write 30000000 0 40000 // 把前面下载到0x30000000的u-boot.bin烧写到Nand去二、方法二,直接通过JLink假如你的开发板没有NOR Flash或者是你使用的NOR Flash还未被J-FLASH ARM所支持,这时上面的方法你就无法使用了,这时候你需要一个初始化内存SDRAM的程序,这个程序完成的功能也就是配置好SDRAM的寄存器,使它能正常工作,fl2440的内存初始化程序下载地址:“2440init.bin”。
你还需要准备一个特殊的u-boot_SDRAM.bin,它与你要烧写到NAND Flash的u-boot.bin有区别,u-boot_SDRAM.bin编译时需要在include/configs/开发板配置文件.h 文件中添加:#define CONFIG_SKIP_LOWLEVEL_INIT 1 //用来支持uboot在内存中直接运行添加这个宏定义之后,U-boot就跳过了内存初始化的部分,因为此时我们的内存已经先由“2440init.bin“初始化好了,再次初始化会出现内存数据的丢失。
Jflash-s3c2410(linux 版本)源码分析最近在远峰公司买了arm9的板子,S3C2410,ARM920T ,没有Nor flash ,Nand Flash 是64M ,SDRAM 是K9f1208,本人对linux 的热情大于windows ,所以想在linux 下做开发,可是远峰公司只给我YFSJF.exe 文件,而且没有源代码,每次在linux 下编译好了后还得切换到windows 下烧录,很是麻烦,于是在网上找了很多Jflash 类似的程序,不过不同的烧录针对不同的硬件平台,Jflash 是跟硬件紧密结合的,比如有的针对Nor Flash ,有的针对Nand Flash 的,不同内核有不同的Jflash ,而且相同的内核也有不同的版本,因为Jtag 的原理图不同,就只能有相对应的Jflash ,程序中的定义要与pc 机并口与Jtag 接口的对应相一致。
在进入源码分析之前要介绍一些预备的知识,有助于理解源代码,毕竟这个程序和硬件联系很紧密的。
首先介绍一下对PC 并口做一些简要的介绍一、PC 标准配备并行口介绍本文主要介绍计算机的标准配备并行端口即25针的母接头端口的应用,在此基础上可以运用相同的原理使用其它模式的并行端口。
并行端口共有25支脚,但不是每支脚均被使用到。
这些脚被区图1分为3种主要的功能,分别是用于数据的传送、检查打印机的状态及控制打印机,其接口如下所示:注:18~脚为GND在PC 机中,标准并行口使用3个8位对这些寄存器,也就是所说的数据、25号的端口寄存器,PC 就是通过状态、控制寄存器的读写访问并口的信号的。
本文中使用一些通用的叫法,8个数据位分别为D0~D7,5个状态位为S3~S7,4个控制为C0~C3。
其中字母表示了端口寄存器,数字则表示该信号在寄存器中的位。
数据寄存器据端口或称数据寄存器(D0~D7)保存了写入数据输出端口的一字节信息。
数据端口可以写入数数据寄存器(即数据输出端口)可擦写、基地址数据,也可以读出数据(即可擦写);写进去的当然是我们希望从数据端口引脚输出的数据,不过读进来的也只是我们上次写进去的数据,或是原来保留在里面的数据,并不是从端口引脚输入PC 的数据。
如何使用Jlink烧录BIOS到GEC2440Author:Aston of 1、背景:粤嵌教育嵌入式培训班ARM部分第一节课内容是带学生玩板子,烧BIOS(即bootloader)到flash,然后使用BIOS程序烧录linux内核镜像、根文件系统、WinCE系统NK等。
拿到开发板光盘一看,烧录工具竟然是老掉牙的SJF2440···我的笔记本没有并口,也懒得去研究这个已经淘汰过时的烧录工具了,于是乎花了点时间研究了下使用Jlink烧录2440 nandflash、norflash的方法。
2、实验环境:2.1、Jlink:taobao买的山寨Jlink,固件版本V8,驱动版本为V4.08I。
附图2.12.2、开发板:GEC2440_V1.12.3、LCD:群创7寸(480 * 272)2.4、串口:使用PL2303 USB转串口线(我的板子DB9接头和电脑串口连接没反应···,也懒得详查是板子硬件问题还是串口线问题了)2.5、MDK3.50:这个不用说了,用来调程序的。
3、参考资料:/a/201006/9696.html。
这篇资料在网上有N多版本,我也不知道哪个是原创了,总之感谢作者!附图2.1, Jlink commander连接上后截图4、原理陈述不管是老式的并口Jtag工具,还是现在很流行的Jlink仿真器,总之都是提供一个从PC 出来的Jtag接口跟目标Jtag设备连接。
这里的目标Jtag设备指的就是CPU(譬如GEC2440开发板上的主芯片S3C2440)不管是nandflash还是norflash,本身都是和CPU相连的,烧写他们只能通过CPU。
即在CPU中运行flash擦除代码、flash编程代码,即可实现对flash的烧写。
Bootloader的主要功能其实就是提供这些功能代码,所以一旦板子上已经烧录有bootloader的情况下,我们不必使用仿真器,只需要通过PC终端(譬如最常用的dnw)便可以烧写自己的代码bin文件到板子SDRAM运行,或者烧录他们到nor/nand flash。
JZ2440烧写方法1、JLink 只能烧写Nor flash,所以首先用JLink 烧写u-boot 到Nor flash,然后把拨码开关拨到Nor 启动,连接上USB-COM1、USB-host 两根USB 线,打开SecureCRT 软件,配置相应串口参数,给开发板上电,按空格键进入u-boot 菜单,根据u-boot 菜单烧写Nand flash、应用程序等。
2、用TFTP 烧写,打开tftpd32.exe 软件,设置Current Directory(下载文件所在目录)、Server interface(选择PC 机的当前IP 地址);设置开发板为Nor 启动,打开SecureCRT 软件,给开发板上电,按空格键进入u-boot 菜单,输入Q 退出菜单,输入print 命令查看开发板当前IP、serverIP,设置开发板本地IP 和PC 在同一个段内,设置服务器IP 为PC 机当前IP 地址:OpenJTAG> setenv ipaddr 192.168.48.111OpenJTAG> setenv serverip 192.168.48.104 保存:OpenJTAG> save 重启开发板,按空格键并退出菜单,ping 服务器:OpenJTAG> ping 192.168.48.104 出现:ERROR: resetting DM9000 -> not respondingdm9000 i/o: 0x20000000, id: 0x90000a46DM9000: running in 16 bit modeMAC: 08:00:3e:26:0a:5bcould not establish linkhost 192.168.48.104 is alive 说明已经连接服务器成功,再tftp 30000000 led_on_c.bin(要下载的文件名),下载文件led_on_c.bin 到30000000 地址处,擦除bootloader 分区:nand erase bootloader 出现:NAND erase: device 0 offset 0x0, size 0x40000Erasing at 0x20000 -- 100% complete.OK 表示擦除成功,输入:nand write 30000000 bootloader,烧写下载的.bin 文件,NAND write: device 0 offset 0x0, size 0x40000262144 bytes written: OK 表示烧写成功!断电,拨回nand 启动,就可以看到下载的程序运行tips:感谢大家的阅读,本文由我司收集整编。
一、S3C2440地址空间分配和片选信号定义S3C2440支持两种启动模式:一种是从Nand Flash启动;一种是从Nor Flash(异或)启动。
在此两种启动模式下,各个片选的存储空间分配是不同的,如下图所示。
左边是nGCS0片选的Nor Flash启动模式下的存储分配图右边是Nand Flash启动模式下的存储分配图(SFR Area为特殊寄存器地址控制)下面是器件地址空间分配和其片选定义可以看出,nGCS0片选的空间在不同的启动模式下,映射的器件是不一样的:在NAND Flash启动模式下,内部的4K Bytes BootSram被映射到nGCS0片选的空间在Nor Flash启动模式下(非Nand Flash启动模式),与nGCS0相连的外部存储器Nor Flash就被映射到nGCS0片选的空间SDRAM 地址空间:0x30000000 ~ 0x34000000二、S3C2440开发板BIOS功能及使用说明1、开机进入BIOS模式Supervivi在出厂的时候已经预装入板子的Nor Flash中,从NOR Flash启动时即可进入BIOS模式,其启动界面如下图所示。
2、主菜单功能说明功能[x]:对Nand Flash进行默认分区,相当于执行命令行的bon part 0 320k 2368k,此命令仅对Linux系统有效功能[v]:通过USB下载Linux bootloader到Nand Flash 的bootloader分区功能[k]:通过USB下载Linux内核到Nand Flash的kernel分区功能[y]:通过USB下载yaffs文件系统映象到Nand Flash的root分区功能[a]:通过USB下载用户程序到Nand Flash中,一般这样的用户程序为bin可执行文件,如2440test(需要支持超过4K限制)、uCos2、U-Boot等;当然也可以是其他任意大小的bin程序。
有很多同学在移植u-boot时,都会对s3c2440从Nandflash启动的过程非常迷惑。
这里发这个帖子给大家介绍一下它的启动流程。
大部分ARM9的CPU内部都集成有一个SRAM,SRAM是英文Static RAM的缩写,它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。
这样他不需要初始化就能够直接使用。
这与我们在外部扩展的大容量的SDRAM是不一样的,外部大容量的SDRAM是需要初始化后才能使用的,这点大家务必要搞清楚。
这点在我做过移植的处理器:s3c2410(arm920t),s3c2440(arm920t),at91rm9200(arm920t),at91sam9260(arm926t) 上都是这样的。
在s3c2440这颗CPU上这个SRAM大小为4KB,datasheet里把它叫做Stepping Stone,江湖人称“起步石”。
Nandflash和Norflash是不同的:Norflash像内存一样是直接挂在系统总线上的,这样有足够多的地址线使得CPU能够寻址到每一个存储单元上去,这也意味着CPU能够直接通过总线访问Norflash上存储的内容,同时他还支持XIP(即片上执行,不用将代码搬到内存中,直接在Norflash上就能运行)。
而Nandflash它并不是直接挂载系统总线上,而是通过Nandflash控制器(这个一般集成在CPU内部)来完成读写操作的。
如果我们把Norflash的那种寻址方式叫直接寻址的话(不是汇编里的那个直接寻址,这里指CPU能够直接通过地址线访问存储器的存储单元),那么这里的Nandflash就是间接寻址(这里需要Nandflash控制器来寻址)。
所以我们在使用Nandflash之前,一定要初始化Nandflash控制器。
理解上面的这点后,就不难理解,为什么系统能够从Norflash直接启动,而不能直接从Nandflash启动。
这是因为,ARM在CPU复位时,CPU默认会到0x0000 0000地址处去取指令,而如果我们是从Norflash启动的话(一般Norflash会挂到Bank0,nGCS0上),s3c2440 CPU就会把Norflash的空间挂接到0x0000 0000这段内存空间上。
s3c2440对nandflash的操作s3c2440对nandflash的操作nandflash在对大容量的数据存储中发挥着重要的作用。
相对于norflash,它具有一些优势,但它的一个劣势是很容易产生坏块,因此在使用nandflash时,往往要利用校验算法发现坏块并标注出来,以便以后不再使用该坏块。
nandflash 没有地址或数据总线,如果是8位nandflash,那么它只有8个IO口,这8个IO口用于传输命令、地址和数据。
nandflash 主要以page(页)为单位进行读写,以block(块)为单位进行擦除。
每一页中又分为main区和spare区,main区用于正常数据的存储,spare区用于存储一些附加信息,如块好坏的标记、块的逻辑地址、页内数据的ECC校验和等。
三星公司是最主要的nandflash供应商,因此在它所开发的各类处理器中,实现对nandflash的支持就不足为奇了。
s3c2440不仅具有nandflash的接口,而且还可以利用某些机制实现直接从nandflash启动并运行程序。
本文只介绍如何对nandflash实现读、写、擦除等基本操作,不涉及nandflash启动程序的问题。
在这里,我们使用的nandflash为K9F2G08U0A,它是8位的nandflash。
不同型号的nandflash的操作会有所不同,但硬件引脚基本相同,这给产品的开发带来了便利。
因为不同型号的PCB板是一样的,只要更新一下软件就可以使用不同容量大小的nandflash。
K9F2G08U0A的一页为(2K+64)字节(加号前面的2K表示的是main区容量,加号后面的64表示的是spare区容量),它的一块为64页,而整个设备包括了2048个块。
这样算下来一共有2112M位容量,如果只算main区容量则有256M字节(即256M×8位)。
要实现用8个IO口来要访问这么大的容量,K9F2G08U0A规定了用5个周期来实现。
文章记录了作者在S3C2440开发板上实现按键点亮LED驱动开发的详细过程,还记录了一些容易出现的错误,以及怎么解决这些错误。
一、驱动开发流程Linux驱动开发不同于应用程序的开发。
驱动开发是直接和硬件打交道的,通过对硬件的操作给应用程序提供一些接口函数,使得应用程序能够“间接”的控制硬件来工作。
对于按键点亮LED的驱动开发流程如下。
二、驱动开发具体步骤1、查看开发板TQ2440底板原理图,找到按键和LED模块,如下图:图-2 按键和LED电路图从上图我们可以清楚地看到K1~K4对应的管脚是ENT1~ENT4,LED1~LED4对应的管脚是nLED_1~nLED_4.2、查看TQ2440_核心板原理图,找到对应的CPU管脚,如下图:图-3 按键和LED对应CPU管脚电路图3、查看s3c2440芯片手册,查看CPU管脚的模式,如下图从上图我们可以看出按键对应的CPU管脚GPF0~GPF4都是占两位(如:GPF0[1:0])。
按键是一种中断,要想让按键工作在中断模式下,就要设置GPF0~GPF4(GPF3除外)管脚都设置在中断模式下,即为10。
对于LED对应的CPU管脚GPB5~GPB8也是占两位。
要想让LED工作,就要让LED工作在输出模式下,即对应管脚设置为01.4、编写按键点亮LED驱动程序/*调用内核头文件,和应用程序调用的头文件不一样*/#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/delay.h>#include <asm/irq.h>#include <linux/interrupt.h>#include <asm/uaccess.h>#include <asm/arch/regs-gpio.h>#include <asm/hardware.h>#include <linux/device.h>#include <linux/poll.h>#define DEVICE_NAME "tope-buttons" //自定义驱动称为“tope-buttons”。
如何烧写S3C2440裸板程序韦东山Linux视频第1期: ARM裸板、u-boot、内核、根文件系统、简单驱动韦东山Linux视频第2期:深入驱动边写边讲网站: 淘宝: 业务 QQ/邮箱: weidongshan@技术支持邮箱: 17653039@视频QQ群 : 177535949,49256475,173968594技术支持MSN : thisway.diy@业务范围: Linux咨询/企培/故障解决一、使用OpenJTAG 或并口JTAG 工具:OpenJTAG 是百问网出品的一款USB 转JTAG 和USB 转串口二合一的工具,适用于没有串口、没有并口的电脑。
并口JTAG 工具是每一款S3C2440开发板都配备的,它只能接在电脑的并口上。
并口JTAG 分为两种:Dongle 、Wiggler ,这两种工具只是使用的并口引脚不同。
百问网开发了烧写软件oflash.exe(Linux 下的版本为oflash),它可以烧写S3C2410、S3C2440、S3C6410的Nor Flash 和Nand Flash ;支持OpenJTAG 、Dongle 和Wiggler 。
oflash 使用很简单,安装好OpenJTAG 或并口JTAG 工具的驱动程序后,直接运行,然后按提示进行选择。
OpenJTAG 驱动程序的安装方法请参考第4节,并口JTAG 驱动的安装方法请参考第5节。
下面是一个例子:图1 使用oflash 烧写裸板程序二、使用JLink烧写Nor FlashJLink只支持烧写Nor Flash,不支持烧写Nand Flash。
要烧写Nand Flash只能按这几步操作:1.开发板设为Nor Flash启动(开发板有选择Nor Flash或Nand Flash启动的开关)2.接好JLlink后,用JLink的软件J-Flash烧写百问网特制的u-boot.bin到Nor Flash上去3.重启开发板,在串口里操作u-boot烧写Nand Flash这节介绍怎样使用J-Flash烧写Nor Flash,下一节介绍怎样使用u-boot烧写Nand Flash。