百问网精智JZ2440开发板使用手册 S3C2440
- 格式:pdf
- 大小:2.84 MB
- 文档页数:44
第十六章ADC和触摸屏接口16.1概述10位CMOS的ADC(模数转换器)是有8通道模拟输入的循环类型设备。
其转换模拟输入信号到10位的数字编码,最大的转换率是在2.5MHz转换时钟下达到500KSPS。
AD转换器支持片上采样和保持功能及掉电模式。
触摸屏接口可以控制或选择触摸屏触点用于XY坐标的转换。
触摸屏接口包括触摸触点控制逻辑和有中断产生逻辑的ADC接口逻辑。
16.2特点-分辨率:10位-微分线性误差:±1.0LSB-积分线性误差:±2.0LSB-最大转换速率:500KSPS-低功耗-供电电压:3.3V-输入模拟电压范围:0~3.3V-片上采样保持功能-普通转换模式-分离的XY坐标转换摸-自动连续XY坐标转换模式-等待中断模式16.3ADC及触摸屏接口操作模块图如图16-1所示AD转换器和触摸屏接口的功能模块图。
注意AD转换器设备是一个循环类型。
注意(图标)当触摸屏接口使用时,XM或PM应该接触摸屏接口的地。
当触摸屏设备不使用时,XM或PM应该连接模拟输入信号作为普通ADC转换用。
16.4功能描述16.4.1AD转换时间当GCLK频率为50MHz和预分频器(预定标器)值为49,总共10位转换时间如下:AD转换器频率=50MHz/(49+1)=1MHz转换时间=1/(1MHz/5cycles)=1/200KHz=5us注:AD转换器设计在最大2.5MHz时钟下工作,所以转换率最高达到500KSPS。
16.4.2触摸屏接口模式(1)正常转换模式单个转换模式可能多数是使用在通用目的的ADC转换。
该模式可以通过设置ADCCON(ADC控制寄存器)来初始化并且完成对ADCDAT0的读写操作(ADC数据寄存器0)。
(2)分离XY坐标转换模式触摸屏控制器可以在两种转换模式中的一种模式下操作。
分离的XY坐标转换模式由以下方法操作。
X坐标模式写X坐标转换数据到ADCDAT0,触摸屏接口产生中断源到中断控制器。
操作步骤
1.将LCD背光板与LCD板相连,LCD板接入12V直流电源(用重量较轻的开关电源)。
注:背光板输入电源端子的1、2、5是连在一起的,接12V;3、4是连在一起的,接地(即1脚接正,3脚接地即可,1脚标识为金属面朝自己的最右边第一脚)。
2.用交叉串口将2440板子的串口(USB设备接口附近、下面的那个)与PC机的串口相连,起动超级终端,波特率为115200。
3.给2440板子电源接12V(用重量较重的铁心电源),按复位按钮。
4.当超级终端出现“Initiating image download in 14 seconds.”时,按“空格”键,输入“boot”回车。
5.当超级终端出现“Enter your selection: ”时,选择“L”键后,将启动WinCE。
如果无法启动时,请将2440板子与LCD连接的排线不要连接,用上述方法启动winCE。
如果LED出现闪烁,说明WinCE正常启动,再重新接上LCD 的排线,重复上述步骤。
6.关于USB鼠标和USB键盘:在双层的USB HOST接口最底层可以接USB 鼠标或者USB键盘或者U盘;当需要同时接以上设备时,请用USB HUB引出来再接在USB HUB上。
第八章直接存储器存取概述s3c2440支持在系统总线和外围总线之间的4路DMA控制器。
每一路DMA控制器可以自由的执行数据在系统总线和(或)外围总线之间的动作。
换句话说,每一路可以在下列列4种情况下运行:1.源设备和目标设备都在系统总线上2.源设备在系统总线上,目标设备在外围总线上3.源设备在外围总线上,目标数据在系统总线上4.源设备和目标设备都在外围总线上DMA的主要优点是它可以不通过CPU直接调用数据。
DMA工执行可以软件开始,也可以从内部的外设请求或者外部的引脚请求开始。
DMA请求源每一路DMA控制器都可以从4种开始请求中选择一路,如果DCON寄存器选择H/W DAM 请求模式(注意,选择S/W时这个DMA请求源没意义)。
表8--1列出了4种请求和每一路的关系:表8--1.DMA开始请求和每一路关系这里nXDREQ0和nXDREQ1表示两个外部源(Extermal Devices),12SSDO和12SSDI分别表示IIS的传输和接收。
DMA 工作状态DMA应用3态FSN(有限状态机),它可以描述为以下3步:State--1. 作为起始状态,DMA等待DMA请求,一旦请求到来马上转到State--2,在这个状态,DMA ACK和INT REQ是0.State--2. 在这个状态,DMA ACK变为1,计数器(CURR_TC)从DCON[19:0]装载。
DMA ACK保持1,直到它被清0。
State--3. 在这个状态,控制DMA原子操作的子FSM被初始化了。
子FSM从源地址读取数据后把它写入目标地址。
在这个操作中,数据宽度和传输大小(单次或突发)应给与考虑。
在完整服务模式中,这种操作不断重复直到计数器(CURR_TC)变为0。
然而在单一模式中只进行一次,当子FSM完成每个原子操作时,主FSM对CURR_TC倒计时。
另外,当CURR_TC为0和中断设置DCON[29]为1 时,主FSM发出INT REQ信号(中断请求信号)。
1.1基于S3C2440控制的嵌入式开发板设计框图详解:1、支持USB接口,USB_HOST接口作为外设可接如U盘等设备。
USB_DEVICE接口与PC机相连,传输数据。
2、10个引角的JTAG接口,用于NAND FALSH 或者Nor FLASH 中没有uboot时,使用该接口下载Uboot程序,使嵌入的系统可以运行。
3、支持LCD扩展,本开发板选择40引脚的LCD显示器。
4、支持IIS音频接口,与UDA1341TS芯片相连,音频信号可以输入和输出。
5、电源:使用AS1117芯片产生3.3V电压,支持大部分芯片的工作电压,使用MAX8860产生1.2V电压供ARM内核使用。
6、支持系统复位,使用复位芯片MAX811应对系统的复位。
7、串口电路,DB-9支持RS232标准电压,使用SP3232或者MAX3232芯片进行电压转换,复合ARM芯片的LVTTL标准电压。
8、GPIO接口,当微控制器或芯片组没有足够的I/O端口,或当系统需要采用远端串行通信或控制时,GPIO产品能够提供额外的控制和监视功能。
该电路使用了7个按键,与ARM的GPIO引脚相连,分别被10K电阻上拉,一般情况下,GPIO处为高电平,一旦按下按键,GPIO的引脚电平变为低电平。
可以使用程序检测该口的电压,或者中断来获取该处电平的变化。
9、ARM型号S3C2440内部有5个16位定时器0,1,2,3支持PWM蜂鸣器电路。
开发板可以通过PWM推动来发出不同频率的声音的蜂鸣器。
只需对驱动口输出驱动电平并通过三极管放大驱动电流就能使蜂鸣器发出声音。
10、S3C2440支持IIC总线接口,IIC电路使用AT24C02A作为主设备通过串行数据线SDA 和串行时钟数据线SCL在总线主从设备上传递信息。
保证各个芯片与ARM的数据传输。
11、支持SD卡扩展。
可读可写。
12、以太网接口,通过DM9000并使用H1102进行网络电压转换来扩展出网络接口RJ45 。
s3c2440中⽂⼿册第6章-nandflash第六章Nand Flash控制器6.1概述⽬前,Nor Flash价格较⾼,⽽SDRAM和Nand Flash存储器相对经济,这样促使⼀些⽤户在NAND Flash上执⾏启动代码,在SDRAM上执⾏主程序。
s3c2440A的驱动代码可以在外部的NAND Flash存储器上被执⾏。
为了⽀持NAND Flash的boot loader,s3c2440A配备了⼀个内部的SRAM缓冲器名为“Steppingstone”。
启动时,NAND Flash上的前4KByte字节将被装载到Steppingstone上别且装载到Steppingstone上的启动代码会被执⾏。
⼀般情况下,启动代码会拷贝NAND Flash上的内容到SDRAM。
使⽤硬件的ECC,NAND Flash的数据被检查。
在完成拷贝的基础上,主程序将在SDRAM上被执⾏。
6.2特性(1)⾃动启动:启动代码在重启时被传输到4kbytes的Steppingstone上。
传输后代码会在Steppingstone上被执⾏(2)NAND Flash存储器接⼝:⽀持256字、512字节、1000字和2000Byte页(3)软件模式:⽤户可以直接访问NAND Flash,例如这个特性可以被⽤于对NADN Flash 存储器的读/擦除/编程。
(4)接⼝:8/16微的NADN Flash存储器接⼝总线(5)硬件ECC⽣成,检测和指⽰(软件纠错)(6)SFR接⼝:⽀持⼩端模式,对于数据和ECC数据寄存器的字节/半字/字访问,对于其他寄存器的字访问。
(7)Steppingstone接⼝:⽀持⼤⼩端,字节/半字/字访问(8)Steppingstone4kB内部SRAM缓冲器可以在NAND Flash启动后被⽤于其他⽬的。
6.2.1模块图6.2.2Boot loader功能在重启期间,NAND Flash控制器通过引脚状态得到连接NAND Flash的信息(NCON(Adv flash),GPG13(页⼤⼩),GPG14(地址周期),GPG15(总线宽度)–参考引脚配置)。
s3c2440嵌入式开发平台操作系统和驱动开发文档目录一前言 (3)二s3c2440嵌入式开发平台介绍 (3)2.1硬件配置: (3)2.2 s3c2440嵌入式开发平台移植的系统软件 (4)2.3 s3c2440嵌入式开发平台特点: (4)三基于s3c2440的bootloader开发和应用 (7)3.1 Bootloader及u-boot简介 (7)3.2 u-boot系统启动流程 (7)3.3 s3c2440开发平台的u-boot移植 (8)3.4 常用uboot命令介绍 (10)四 4.2操作系统简介 (12)4.1 嵌入式系统 (12)4.2 嵌入式操作系统与Windows CE (12)4.3 从操作系统角度看Windows 的主要功能 (13)4.4 从开发角度看Windows 的主要功能 (13)4.5 Windows 操作系统模型 (14)五开发平台Platform Builder 4.2简介 (16)5.1 PB的安装步骤 (16)5.2 Plarform Builder文件夹结构 (20)六S3C2440嵌入式开发平台的WINCE开发流程 (22)6.1 安装Platform Builder 4.2 (22)6.2 安装Embeded Visual C++ (22)6.3 选择BSP (22)6.4 PB下WINCE的开发、定制 (23)七基于s3c2440的WINCE驱动开发 (33)7.1 wince驱动模型 (33)7.2 2440一个驱动程序示例:基于WinCE的I2C驱动程序设计 (42)八基于2440的嵌入式应用程序开发以及加载至内核 (45)8.1 主流嵌入式开发软件介绍 (45)8.2 基于s3c2440嵌入式开发平台的EVC开发 (46)8.3 把应用程序加入到WINCE内核 (49)8.4 一些EVC下实用的WIN32函数 (50)8.5 EVC下的调试工具 (52)九实现永久保存注册表数据 (53)十Windows CE 下应用程序自动启动 (54)10.1建立快捷方式 (54)10.2 修改shell.reg文件 (55)十一开机后直接运行您的程序而不显示Windows CE桌面 (56)附录一flash.c (57)附录二dm9000.c (69)附录三smdk2440nand.h (74)一前言本开发文档是基于s3c2440嵌入式开发平台所制定,主要从s3c2440的bootloader开发、应用以及windows 4.2在该平台的移植、基于本平台的驱动开发介绍以及基于该平台的一些开发技巧。
按键与LED灯,四个中断控制四个灯LED引脚连接按键引脚连接://===================================================================== =// 开发板:GT2440// 工程名称:KEY_EINT// 功能描述:外部中断0 2 11 19 控制四个LED小灯//===================================================================== =/******************************************************************************4 个用户按键四个输入引脚:EINT0 -----( GPF0 )----INPUT---K1EINT2 -----( GPF2 )----INPUT---K2EINT11 -----( GPG3 )----INPUT---K3EINT19 -----( GPG11 )----INPUT---K4******************************************************************************/ #include "def.h"#include "2440addr.h"#include "2440lib.h"#include "string.h"#include "uart.h"#define LED1ON 0xFDE //LED1点亮值为0x7DE(低电平点亮)#define LED2ON 0xFBE#define LED3ON 0xF7E#define LED4ON 0xEFE#define LEDOFF 0xFFF //LED熄灭值为0xFFFvoid __irq EintHandler0(void);void __irq EintHandler2(void);void __irq EintHandler8_23(void);void Main(void){memcpy((unsigned char *)0x0,(unsigned char *)0x30000000,0x1000);SetSysFclk(FCLK_400M); //设置系统时钟400MChangeClockDivider(2, 1); //设置分频1:4:8CalcBusClk(); //计算总线频Uart_Select(0);Uart_Init(0,115200);Uart_Printf("KEY EINT TEST\n");Uart_Printf("Use Eint 0,2,11,19 falling edge\n");rGPBCON = (rGPBCON | 0xFFFFFFF) & 0xFFFd57FC; //GPB5--GPB8设置为output rGPBUP = rGPBUP & 0xFE1F; //使能GPB5 6 7 8上拉电阻rGPBDAT = 0x7FE; //GPB5 6 7 8位初始化为1/***********************************************************//GPF0 GPF2设置为EINT[0],EINT[2] 10 = EINT[2] 10 = EINT[0]//设置GPGCON的3,11为中断功能,分别对应EINT[11] EINT[19]*************************************************************/rGPFCON = (rGPFCON|0xFFFF)&0xFFFFFFEE;rGPGCON = (rGPGCON|0xFFFFFFFF)&0xFFBFFFBF;/*************************************************************** START:外部中断控制寄存器3位一个设置触发沿, 设置外部中断0 ,2下降沿触发外部中断控制寄存器3位设置一个触发沿, 设置外部中断11下降沿触发外部中断控制寄存器3位设置一个触发沿, 设置外部中断19下降沿触发01x = 下降沿触发*****************************************************************/ rEXTINT0 &= ~(7<<0 | 7<<8 );rEXTINT0 |= (2<<0 | 2<<8) ;rEXTINT1 &= ~(7<<12 );rEXTINT1 |= (2<<12) ;rEXTINT2 &= ~(7<<12 );rEXTINT2 |= (2<<12) ;/*************************************************************** END*****************************************************************//********************************************************//外部中断0~3保留为0 不用使能EINTPEND和EINTMASK rEINTPEND |= (1<<0|1<<2); //clear eint 4 rEINTMASK &= ~(1<<0|1<<2); //enable eint************************************************************//********************************************************//外部中断11,19需要对EINTPEND(外部中断挂起寄存器)清零并对EINTMASK(外部中断屏蔽寄存器)清零使能EINTPEND写1清零使能中断,EINTMASK清零使能中断************************************************************/ rEINTPEND |= (1<<11|1<<19);rEINTMASK &= ~(1<<11|1<<19);/***********************************************************清源挂起(SRCPND)寄存器和中断挂起(INTPND)寄存器,可以直接操作寄存器这两个函数在2440addr.h中定义*************************************************************/ ClearPending(BIT_EINT0);ClearPending(BIT_EINT2);ClearPending(BIT_EINT8_23);/***********************************************************pISR_EINT0,2中断的入口地址,定义在2440addr.inc中2440addr.inc文件内定义了用于汇编的s3c2440寄存器变量和地址*************************************************************/ pISR_EINT0 =(unsigned)EintHandler0;pISR_EINT2 =(unsigned)EintHandler2;pISR_EINT8_23 =(unsigned)EintHandler8_23;/*********************************************************** 使能或禁止中断,这是个宏定义,其原型为rINTMSK &= ~(bit)这里的操作就是取消了屏蔽,中断就开始了*************************************************************/ EnableIrq(BIT_EINT0);EnableIrq(BIT_EINT2);EnableIrq(BIT_EINT8_23);while(1);}//外部中断0,服务函数void __irq EintHandler0(void){if(rINTPND==BIT_EINT0){ClearPending(BIT_EINT0);Uart_Printf("KEY To LED1 ON \n");rGPBDAT = LED1ON;Delay(500);rGPBDAT = LEDOFF;}}//外部中断2,服务函数void __irq EintHandler2(void){if(rINTPND==BIT_EINT2){ClearPending(BIT_EINT2);Uart_Printf("KEY To LED2 ON \n");rGPBDAT = LED2ON;Delay(500);rGPBDAT = LEDOFF;}}//外部中断11,19服务函数void __irq EintHandler8_23(void){if(rINTPND==BIT_EINT8_23){ClearPending(BIT_EINT8_23);if(rEINTPEND&(1<<11)){Uart_Printf("KEY To LED3 ON \n");rGPBDAT = LED3ON;Delay(500);rGPBDAT = LEDOFF;rEINTPEND |= 1<< 11;//写1清零该位}if(rEINTPEND&(1<<19)){Uart_Printf("KEY To LED4 ON \n");rGPBDAT = LED4ON;Delay(500);rGPBDAT = LEDOFF;rEINTPEND |= 1<< 19;//写1清零该位}}}。
jz2440开发板玩法话说,开发板的资料⽬录乱得让⼈头⽪发⿇,最后发现 \开发板资料\百问⽹精智JZ2440开发板4.3⼨LCD版使⽤⼿册.pdf 是关键⽹页资料:驱动安装驱动⽂件⽬录路径别太长,否则windows会报错:系统找不到指定的⽂件百问⽹的新版 Jz2440 v3.0,插上电源线Windows:{禁⽤驱动签名} 排线⼝ (被识别成两个USB<=>JTAG&RS232+⼀个USB Serial Port)micro USB Serial 串⼝的 Prolific USB-to-Serial Comm Port 会被系统⾃动更新安装micro USB Devices 设备开机模式下的DNW驱动 SEC S3C2410X Test B/D找了很久,最后发现可以直接⽤开源⼯具全部⼀键安装。
这⾥附上2.5版本附上:驱动安装完成排线是三个 OPENJTAG设备(USB Serial Port + 100ASK JTAG + 100ASK Serial Port )靠近⽹线⼝的是 micro USB Serial 串⼝ Prolific USB-to-Serial Comm Port在usb串⼝旁边的是 Micro USB Devices SEC S3C2410X Test B/D,这个设备偶尔会报错, 且会受VMware的影响,重开开发板/虚拟机就可以了(最好是插线开机后再开虚拟机)可以调整COM端⼝号,双击设备,端⼝设置-⾼级,设置为COM1编译 Bootloader 和操作系统Bootloader选⽤ U-Boot,操作系统选⽤ Linux-arm交叉编译ARM版的U-Boot,及插桩打补丁因为虚拟⽹卡出了问题,⼜刚好有个分区没⽤到,所以直接放uboot等源码⽂件并映射成虚拟磁盘给VMware⽤了。
注意:如果按任意键召唤不了uboot菜单,那么建议断开usb,先插电开机再串⼝调试,按开发板的RESET键重启准备交叉编译环境推荐做完以下步骤后,试试⾃⼰搭建交叉编译环境及其鉴于国内垃圾GFW⽹络,在此提供官⽹下的⽆修改压缩包⽤资料提供的古⽼的ubuntu9.10.......,当然我在评论区放了Ubuntu18.04的使⽤⽅案把这个arm-linux-gcc包解压到根⽬录,然后编辑环境变量sudo tar -xjf arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2 -C /optsudo vi /etc/profile在末尾添加如下export PATH=$PATH:/opt/gcc-3.4.5-glibc-2.3.6/bin按ESC,输⼊:wq保存退出刷新环境变量配置source /etc/profile**注: ** 如果之前使⽤了其他版本的gcc,那么应该关闭终端窗⼝后重新打开,并source /etc/profile,否则make⾥的gcc变量依然是之前的版本如果希望⾃定义交叉编译环境,可以⽤export 设置仅在当然终端窗⼝⽣效的临时全局变量,或者在原 make 命令后接上如 CROSS_COMPILE=/opt/gcc-3.4.5-glibc-2.3.6/bin/arm-linux- ⽤于指定编译器路径及其前缀插桩编译 Uboottar xjf u-boot-1.1.6.tar.bz2cd u-boot-1.1.6/patch -p1 < ../u-boot-1.1.6_jz2440.patch使⽤配置并⼀键编译make 100ask24x0_configmake或者指定交叉编译⼯具链前缀路径变量make ARCH=arm CROSS_COMPILE=/opt/gcc-3.4.5-glibc-2.3.6/bin/arm-linux- 100ask24x0_configmake CROSS_COMPILE=/opt/gcc-3.4.5-glibc-2.3.6/bin/arm-linux-插桩编译 Linux2.6tar xjf linux-2.6.22.6.tar.bz2cd linux-2.6.22.6patch -p1 < ../linux-2.6.22.6_jz2440.patchmake s3c2410_defconfig #如果不想⽤现成的config_ok,可以基于uboot提供的2410⾃⼰修改(⽅案1)cp config_ok .config #直接使⽤100ask官⽅做好的配置(⽅案2)make menuconfig #配置菜单(可选)make uImage烧写开发板⽤ oflash 烧写⼯具将U-boot.bin写⼊开发板的 Nor Flash (通过 OpenJTAG 排线接⼝)通过 USB 串⼝⽤终端命令和开发板交互(数字电路原理:信息本质都是通过电信号传输的,所以和⽹络ssh本质上也没有差别,和ssh⼀样操作命令就⾏) 记得设置波特率为115200并关闭流控(Flow Control),然后重开终端窗⼝可以通过串⼝操作Uboot,利⽤Uboot提供的 [k]Download linux kernel uImage来将嵌⼊式操作系统如Linux2.6写⼊开发板接上两根usb,⽤新建串⼝终端,>Transmit选择编译好的uImage烧写即可。
s3c2440LCD控制器设置及代码详解要使一块LCD正常的显示文字或图像,不仅需要LCD驱动器,而且还需要相应的LCD操纵器。
在通常情形下,生产厂商把LCD驱动器会以COF/COG的形式与LCD玻璃基板制作在一起,而LCD操纵器则是由外部的电路来实现,现在专门多的MCU内部都集成了LCD操纵器,如S3C2410/2440等。
通过LCD操纵器就能够产生LCD驱动器所需要的操纵信号来操纵STN/TFT屏了。
2. S3C2440内部LCD操纵器结构图:我们依照数据手册来描述一下那个集成在S3C2440内部的LCD操纵器:a:LCD操纵器由REGBANK、LCDCDMA、TIMEGEN、VIDPRCS寄存器组成;b:REGBANK由17个可编程的寄存器组和一块256*16的调色板内存组成,它们用来配置LCD操纵器的;c:LCDCDMA是一个专用的DMA,它能自动地把在侦内存中的视频数据传送到LCD 驱动器,通过使用那个DMA通道,视频数据在不需要CPU的干预的情形下显示在LCD屏上;d:VIDPRCS接收来自LCDCDMA的数据,将数据转换为合适的数据格式,比如说4/8位单扫,4位双扫显示模式,然后通过数据端口VD[23:0]传送视频数据到LCD 驱动器;e:TIMEGEN由可编程的逻辑组成,他生成LCD驱动器需要的操纵信号,比如VSYNC、HSYNC、VCLK和LEND等等,而这些操纵信号又与REGBANK寄存器组中的LCDCON1/2/3/4/5的配置紧密相关,通过不同的配置,TIMEGEN就能产生这些信号的不同形状,从而支持不同的LCD驱动器(即不同的STN/TFT屏)。
3. 常见TFT屏工作时序分析:LCD提供的外部接口信号:VSYNC/VFRAME/STV:垂直同步信号(TFT)/帧同步信号(STN)/SEC TFT信号; HSYNC/VLINE/CPV:水平同步信号(TFT)/行同步脉冲信号(STN)/SEC TFT信号;VCLK/LCD_HCLK:象素时钟信号(TFT/STN)/SEC TFT信号;VD[23:0]:LCD像素数据输出端口(TFT/STN/SEC TFT);VDEN/VM/TP:数据使能信号(TFT)/LCD驱动交流偏置信号(STN)/SEC TFT 信号;LEND/STH:行终止信号(TFT)/SEC TFT信号;LCD_LPCOE:SEC TFT OE信号;LCD_LPCREV:SEC TFT REV信号;LCD_LPCREVB:SEC TFT REVB信号。
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个周期来实现。
百问网·精智JZ2440使用手册提示:除了QT外,可以不看本手册,参考《嵌入式Linux应用开发完全手册》及视频即可第1章嵌入式Linux开发环境构建 (4)1.1 安装Ubuntu 9.10 (4)1.1.1 安装VMware (4)1.1.2 安装Ubuntu 9.10 (13)1.2 安装Ubuntu下的开发工具 (20)1.3 安装Windows下的开发工具 (22)第2章精智JZ2440开发板烧写程序方法 (23)2.1 使用JTAG工具烧写开发板 (23)2.1.1 Windows下并口JTAG驱动安装 (23)2.1.2 Windows下OpenJTAG驱动安装 (29)2.1.3 Ubuntu下驱动程序的安装 (29)2.1.4 JTAG烧写软件oflash的用法 (29)2.2 通过u-boot烧写整个系统 (29)2.2.1 在Windows下使用dnw和u-boot烧写系统 (30)2.2.2 在Linux下使用dnw和u-boot烧写系统 (31)第3章板上Linux系统搭建 (33)3.1 修改、编译、使用u-boot (33)3.1.1 使用补丁修改、编译u-boot (33)3.1.2 u-boot使用方法 (33)3.2 修改、编译、使用Linux内核 (36)3.2.1 使用补丁修改、编译内核 (36)3.2.2 使用uImage (36)3.3 修改、编译QT (36)3.3.1 编译依赖的软件 (36)3.3.2 使用补丁修改、编译QT (39)3.4 构造根文件系统 (39)3.4.1 基于最小根文件系统制作QT文件系统 (39)3.4.2 制作YAFFS2、JFFS2文件系统映象文件 (42)第1章 嵌入式Linux开发环境构建1.1 安装Ubuntu 9.10注意:如果使用光盘上已经制作好的虚拟机,那么1.1或1.2的内容可以忽略。
《嵌入式Linux应用开发完全手册》里使用的主机开发环境是Ubuntu 7.10,现在最新的Ubuntu版本是9.10。
如果想在Windows下进行开发,那么要先安装一个虚拟机,比如VMware。
它将虚拟出一台主机,可以在这台虚拟主机上安装Ubuntu。
1.1.1 安装VMware从VMware的官方网站下载到VMware工具,安装后,参照以下方法创建一台虚拟机。
建议建立两个虚拟硬盘,一个用来存放Ubuntu本身,另一个用来存放我们的工作资料。
①启动VMWare,如图1.1所示,点击“New Virtual Machine”即可开始创建一个虚拟主机:图1.1 启动VMware②在后续界面中使用默认选项,直到出现如图1.3所示的界面,在里面选择“Custom”自己定制虚拟机器。
图1.2 选择定制虚拟机 ③选择虚拟机的操作系统,我们使用Ubuntu:图1.3 选择定制虚拟机①给虚拟机建一个名字:图1.4 输入虚拟主机名字、存储位置②指定虚拟机的内存容量,在图1.4所示的界面中有推荐值及取值范围:图1.5 指定内存容量③指定虚拟机的网络连接类型,一般使用桥接方式(bridge networking),如图1.8所示。
安装完华后可以再进行修改。
图1.6 指定虚拟机的网络连接类型⑦以下4个步骤是用来建立一个15G的虚拟硬盘:图1.7 指定硬盘I/O adapter图1.8 选择创建新的虚拟硬盘图1.9 指定硬盘容量图1.10 设置虚拟硬盘的名字⑧在上图中单击“完成”按钮后,就创建了一个虚拟机器,得到如图1.11所示的界面。
图1.11 建立好的虚拟机还要创建一个硬盘,点击下图的“Edit virtual machine settings”进行设置。
参照以下图1.12、1.13、1.14及步骤⑦增加一个容量为40G的虚拟硬盘,命名为work.vmdk(用来作为工作硬盘)。
想让虚拟机支持并口、USB口,也是仿照图1.12、1.13、1.14的步骤进行。
图1.12 修改虚拟机的设置图1.13增加新硬件图1.14 选择增加新硬盘1.1.2 安装Ubuntu 9.10Ubuntu 9.10的安装光盘名为ubuntu-9.10-desktop-i386.iso,可以从网上下载,也可以在开发板光盘的os目录下获得。
在虚拟机上安装Ubuntu与在真实电脑上安装Ubuntu的过程大致相同。
在虚拟机上安装时,要先设置虚拟机的光盘使用下载的iso文件,如图1.15所示。
进入虚拟机的编辑界面,选中“CD-ROM”,在右边的界面中,选择“Connnect at power on”(表示开启虚拟机时就连接光盘);然后选择“Use ISO image”,如果有实际的光盘,可以选择“Use physical drive”。
图1.15 在虚拟机上使用光盘文件启动虚拟机,或是使用Ubuntu 9.10的安装光盘启动真实主机,然后按照以下图示及说明即可安装。
图1.16 使用安装光盘启动电脑时,选择“Install Ubuntu”图1.17 选择语言,建议选择English图1.18 选择语言,建议选择English图1.19 选择时区图1.20 选择“自己进行分区”图1.21 双击/dev/sda,开始分区图1.22 双击free space,划分/boot分区,大小为100M图1.23 双击free space,划分swap分区,大小为1G图1.24 双击free space,划分/分区,大小为剩下的所有容量图1.25 双击/dev/sdb,开始分区图1.25 双击free space,划分/work分区,大小为所有容量图1.26 设置用户名、密码1.2 安装Ubuntu下的开发工具刚安装好的Ubuntu,还缺乏很多开发工具。
这些工具都可以通过网络进行安装。
如果网络不佳,也可以使用光盘中的工具包。
如果要使用光盘中的工具包,先把光盘linux目录下的apt_packages目录复制到Ubuntu 里/work目录下;然后修改/etc/apt/sources.list文件,增加下面一行(注意最后的斜杠“/”不可少):deb file:/work/ apt_packages/注意:如果提示网络错误,请修改/etc/apt/sources.list文件,只保留“deb file:/work/ apt_packages/”这一行,其他的都去掉。
不管是否使用光盘中的工具包,均是使用以下命令进行安装:①更新软件源$ sudo apt-get update②安装、配置、启动ftp服务。
执行以下命令安装,安装后即会自动运行:$ sudo apt-get install vsftpd修改vsftpd的配置文件/etc/vsftpd.conf,将下面几行前面的“#”号去掉。
#local_enable=YES#write_enable=YES上面第一行表示是否允许本地用户登录,第二行表示是否允许上传文件。
修改完华之后,执行以下命令重启ftp服务:$ sudo /etc/init.d/vsftpd restart③安装、配置、启动ssh服务。
执行以下命令安装, 安装后即会自动运行:$ sudo apt-get install openssh-server它的配置文件为/etc/ssh/sshd_config,使用默认配置即可。
④安装、配置、启动nfs服务。
执行以下命令安装, 安装后即会自动运行:$ sudo apt-get install nfs-kernel-server portmap它的配置文件为/etc/exports,在里面增加以下内容,以后将通过网络文件系统访问/work/nfs_root目录:/work/nfs_root *(rw,sync,no_root_squash)修改完华之后,执行以下命令重启nfs服务:$ sudo /etc/init.d/nfs-kernel-server restart⑤安装、配置tftp服务软件:$ sudo apt-get install openbsd-inetd tftpd tftp打开/etc/inetd.conf文件,里面有一行如下:tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /srv/tftp 把“nobody”改为“root”,把“/srv/tftp”改为“/work/nfs_root”,表示tftp目录。
⑥使用以下命令安装基本的开发环境:$ sudo apt-get install build-essential texinfo⑦安装工具bison、flex,它们分别是语法、词法分析器:$ sudo apt-get install bison flex libtool automake autoconf⑧安装C函数库的man手册,以后就可以通过类似“man read”的命令查看函数的用法了:$ sudo apt-get install manpages-dev⑨安装ckermint工具:$ sudo apt-get install ckermit使用kermit之前,先在/homt/book(假设用户名为book)目录下创建一个名为.kermrc(注意,是“点kermrc”)的配置文件,内容如下:set line /dev/ttyS0set speed 115200set carrier-watch offset handshake noneset flow-control nonerobustset file type binset file name litset rec pack 1000set send pack 1000set window 5然后,运行“$ sudo kermit -c”命令即可启动串口;要想关闭串口,先同时按住“Ctrl”和“\”键,然后松开再按“C”键,最后输入“exit”并回车。
在Linux中,可以使用kermit连接串口以操作目标板。
(10) 安装ddd工具:$ sudo apt-get install ddd(11) 安装QT开发环境:$ sudo apt-get install x-dev libx11-dev x11proto-xext-dev libxext-dev libqt3-mt-dev$ sudo apt-get install kdevelop konsole(12) 安装ncurses:ncurses是一个能提供功能键定义(快捷键)、屏幕绘制以及基于文本终端的图形互动功能的动态库。
如果没有它,在执行“make menuconfig”命令配置程序时会出错。