嵌入式系统开发3S3C2410主要外设功能部.ppt

上传人:max****ui 文档编号:2026110 上传时间:2019-11-13 格式:PPT 页数:75 大小:8.91MB
返回 下载 相关 举报
嵌入式系统开发3S3C2410主要外设功能部.ppt_第1页
第1页 / 共75页
嵌入式系统开发3S3C2410主要外设功能部.ppt_第2页
第2页 / 共75页
嵌入式系统开发3S3C2410主要外设功能部.ppt_第3页
第3页 / 共75页
点击查看更多>>
资源描述
第三章 S3C2410主要外设功能部件,ARM汇编指令 UART异步串口通信 通用I/O端口 Nand Flash控制器 NOR Flash接口电路,1. ARM汇编指令,加载/存储指令,LDR:LDR条件目的寄存器, 用于将存储器中的一个32位的字数据传送到目的寄存器中;常用于从存储器中读取32为的字数据到通用寄存器。 ldr r0,=rPCONE /寄存器地址存放到通用寄存器中,STR:STR条件源寄存器, 用于从源寄存器中将一个32位的字数据传送到存储器中。 ldr r0,UARTADD str r1,r0 /向UART中存入数据,数据处理指令,MOV:MOV条件S目的寄存器,源操作数 用于完成从另一个寄存器、被移位的寄存器或将一个立即数加载到目的寄存器;S项决定指令的操作是否影响CPSR中条件标志位的值,当无S时,指令不更新CPRS中条件标志位的值。 mov r9,r2 movs r0,#oxFF00,CMP:CMP条件 操作数1,操作数2 用于把一个寄存器的内容和另一个寄存器的内容或立即数进行比较,同时更新CPSR中条件标志位的值。该指令只进行一次减法运算,但不存储结果,只更改条件标准位。 cmp r0,#oxFF00,跳转指令 用于实现程序流程的跳转;可以完成从当前指令向前或向后的32MB地址空间的跳转;(超过要使用直接向程序计数器PC写入跳转地址值的方式)。 B 跳转指令 BL 带返回的跳转指令 BLX 带返回和状态切换的跳转指令 BX 带状态切换的跳转指令,WAKEUP_SLEEP ;Release SCLKn after wake-up from the SLEEP mode. ldr r1,=MISCCR ldr r0,r1 bic r0,r0,#(717) str r0,r1 ;Set memory control registers ldr r0,=SMRDATA ldr r1,=BWSCON ;BWSCON Address add r2, r0, #52 ;End address of SMRDATA ldr r3, r0, #4 str r3, r1, #4 cmp r2, r0 bne %B0 ;(Before to lable 0),2. UART异步串口通信,UART与RS232、RS485之间的联系与区别,计算机史前 RS232 DB25 同步和异步 个人计算机 RS232 DB9(小型) 异步 IBM PC RS232 DB9 完整的定义 PC时代 整合RS232和非RS232串口的UART NB时代 USB和1394取代UART 后PC时代 USB3.0、SATA,串口、并口之争,UART TTL电平 3.3V 正逻辑 RS232 +5+12为低,-12-5为高 负逻辑 RS485 +2+6为高,-2-6为低 正逻辑 电平为线间压差、10Mbps、3000m MAX232、MAX485,UART异步串口的传输格式:,以字符为传输单位 字符间的时间间隔不定,字符内的时间间隔固定 空闲位、起始位、资料位、奇偶校验位、停止位,UART通信时序图,开始前,空闲状态,送出连续“1”; 传送开始,发出“0”,然后是发送字符; 字符长度可以约定,ASCII编码; 字符最后一位之后添加奇偶校验(可选); 完毕后,发送停止位“1”信号,宽度约定; 进入空闲状态,送出连续“1”,UART通信过程:,S3C2410的UART控制器:,3个独立的异步串行I/O端口; 具有中断和DMA两种模式; 最高支持速率115.2Kpbs; 每个通道包含2个16位FIFO寄存器; 可编程的波特率、红外收发模式; UART Ch 0 and 1 with nRTS0, nCTS0, nRTS1, and nCTS1 每个UART包含波特率发生器、接收器、发送器和控制单元,波特率发生器:,为传输提供串行移位时钟; 其时钟源从内部系统或UCLK中选择; 波特率由时钟源16分频和波特率除数寄存器(UBRDIVn)指定的16位除数决定。,UBRDIVn = (int)(PCLK/(bps x 16) ) -1,UBRDIVn = (int)(40000000/(115200 x 16) -1 = (int)(21.7) -1 = 21 -1 = 20,自动流控(Auto Flow Control):,通过RTS和CTS信号实现; 只有当CTS有效时,UART将FIFO中的数据发出; 只要接收FIFO至少2B空余时,RTS就会被置为有效。,UART异步串口的软硬件应用:,硬件电路图:,Max202芯片相关信息,相关寄存器:,33个控制寄存器,分为11类; 线控制寄存器ULCONn:规定传输帧格式; 控制寄存器UCONn:定义发送/接收数据模式; 状态寄存器UTRSTATn,读取接收/发送状态; 波特率寄存器UBRDIV,确定波特率划分值; 发送寄存器UTXHn,表示发送的数据; 接收寄存器URXHn,表示接收的数据。 FIFO控制寄存器、 FIFO状态寄存器、 Modem控制寄存器、 Modem状态寄存器、错误状态寄存器,UART LINE CONTROL REGISTER,UART CONTROL REGISTER,UART TX/RX STATUS REGISTER,UART TRANSMIT BUFFER REGISTER,UART RECEIVE BUFFER REGISTER,UART BAUD RATE DIVISOR REGISTER,#define ULCON0 (*(volatile unsigned *)0X50000000) /UART线控制寄存器 #define UCON0 (*(volatile unsigned *)0X50000004) /UART控制寄存器 #define UFCON0 (*(volatile unsigned *)0X50000008) /FIFO控制寄存器 #define UTRSTAT0 (*(volatile unsigned*)0X50000010) /UART状态寄存器 #define UBRDIV0 (*(volatile unsigned *)0X50000028) /波特率除数寄存器 #define UTXH0 (*(volatile unsigned *)0X50000020) #define URXH0 (*(volatile unsigned *)0X50000024),int TSmain() char buf; ULCON0 ,3. 通用I/O端口,通用I/O端口的分类,由软件设置。在启动程序之前必须定义每个引脚的使用功能。否则,即被配置为I/O端口。,I/O端口的应用电路类型:,无需上拉电阻的应用,推荐:采用灌电流方式驱动电路,直接加限流电阻; I/O端口的电流为4mA。 例外:考虑拉电流与灌电流是否接近; I/O端口作输入用时,采集信号的需要;,需上拉电阻的应用,推荐:自身结构要求需要上拉电阻,如IIC总线功能 按芯片手册指定连接,I/O端口的软硬件应用:,硬件电路图:,相关的寄存器:,40多个控制寄存器,分为5类; 配置寄存器CPXCON:定义X端口的引脚; 数据寄存器GPXDAT:读/写端口数据; 上拉寄存器GPYUP:使能端口的上拉寄存器; 混合控制寄存器:控制上拉电阻、高阻状态等; 外部中断控制寄存器EXTINTN等;,GPxCON寄存器:它用于配置引脚的功能 端口A与端口B-H在功能上有所不同,GPACON中每一位对应一根引脚(共23根引脚);GPACON通常被设为全1,以便访问外部存储设备; 端口B-H在寄存器操作上完全相同,GPxCon中每两位控制一根引脚,00表示输入,01表示输出,10表示特殊功能,11保留不用 GPxDAT寄存器:用于读写引脚 当引脚被设为输入时,读此寄存器得到对应引脚的电平状态是高还是低;当引脚被设为输出时,写此寄存器相应位可令此引脚输出高低电平。 GPxUP寄存器: 上拉电阻、下拉电阻的作用在于,当GPIO引脚处于第三态(非高低电平,而是高阻态,即相当于没接芯片)时,它的电平状态由上拉电阻和下拉电阻确定。,PORT A CONTROL REGISTERS (GPACON/GPADAT),PORT X CONTROL REGISTERS (X=BH) (GPXCON, GPXDAT, and GPXUP),各组端口数量不一,所以并不固定。,#define GPFCON (*(volatile unsigned *)0x56000050) #define GPFDAT (*(volatile unsigned *)0x56000054) #define GPFUP (*(volatile unsigned *)0x56000058) int LedMain() void Delay(unsigned int); unsigned char ledtab=0xf7,0xef,0xdf,0xbf; int i; GPFUP ,4. Nand Flash控制器,Flash芯片的类型,有Samsung、TOSHIBA和Fujistu生产; 以页为单位读和编程;以块为单位擦除; 具有块编程和块擦除功能,块擦除时间2ms; 数据、地址采用同一总线,串行读取; 随机读取速度慢,不能按字节随机编程; 芯片尺寸小、引脚少,位成本最低的固态存储器; 应用Smart-Media、CF卡、固态盘等的存储介质。,Nand Flash简介:,Nor Flash简介:,Intel开发出以替代EEPROM; 单字节或单字编程;以块或整片为单位擦除; 在重编程之前要对块或整片进行预编程和擦除操作; 擦除或编程的时间很长; 拥有独立的数据总线和地址总线; 可直接从芯片中读取代码执行;,Nor Flash和Nand Flash区别,性能比较,擦除NOR器件是以64128KB的块进行,执行一个写入/擦除操作的时间为5s;擦除NAND器件是以832KB的块进行的,执行相同的操作最多只需要4ms。 NOR的读速度比NAND稍快一些。 NAND的写入速度比NOR快很多。 大多数写入操作需要先进行擦除操作。 NAND的擦除单元更小,相应的擦除电路更少,NAND flash生产过程更为简单,成本低 常见的NOR flash为128KB16MB,而NAND flash通常有512MB2GB NOR主要应用在代码存储介质中,NAND适合于数据存储 NAND在CompactFlash、Secure Digital、PC Cards和MMC存储卡市场上所占份额最大,在NAND中每块的最大擦写次数是100万次,而NOR的擦写次数是10万次 位交换的问题NAND flash中更突出,需要ECC纠错 NAND flash中坏块随机分布,需要通过软件标定产品量产的问题,接口差别,NOR flash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节。 NAND器件使用复杂的I/O口来串行地存取数据,各个产品或厂商的方法可能各不相同。8个引脚用来传送控制、地址和数据信息。 NAND读和写操作采用512字节的块,这一点有点像硬盘管理此类操作,很自然地,基于NAND的存储器就可以取代硬盘或其他块设备,使用差别,可以非常直接地使用基于NOR的闪存,可以像其他存储器那样连接,并可以在上面直接运行代码。 由于需要I/O接口,NAND要复杂得多。各种NAND器件的存取方法因厂家而异。 在使用NAND器件时,必须先写入驱动程序,才能继续执行其他操作。向NAND器件写入信息需要相当的技巧,因为设计师绝不能向坏块写入,这就意味着在NAND器件上自始至终都必须进行虚拟映射。,Nand Flash控制器,NAND Flash模式:支持读/擦/编程Nand flash存储器 自动导入模式;复位后,自动导入引导代码至内部SRAM缓冲器“Steppingstone”; 具备硬件ECC产生模块(硬件产生,软件纠正); 4KB内部SRAM缓冲器,引导后可作为其他用途使用。,Nand Flash控制器特性:,NAND Flash控制器内部结构方框图,Nand Flash控制器管脚配置:,nCON:Nand Flash内存地址补偿(寻址步骤数选择),多次传送地址的步长数。,Nand Flash工作模式:,自动启动模式: (1)完成复位; (2)如果自动启动模式使能,NAND Flash存储器的前4KB自动复制到Steppingstone内部缓冲器; (3)Steppingstone映射到nGCS0; (4)CPU在Steppingstone的4KB内部缓冲器中开始执行启动代码。 注意:在自动启动模式下,不进行ECC检测。因此,应确保NAND Flash的前4KB不能有位错误(一般NAND Flash厂家都能确保)。,NAND Flash的操作模式,在复制NAND FLASH的前4KB到Steppingstone的过程中,ECC不会被检查,这就必须保证所用NAND的前4KB没有坏位。如果使用三星的NAND FLASH,这一点是完全可以保证的,三星NAND FLASH的Block0是没有坏位的,访问时不用进行错误校验。使用其他品牌的NAND FLASH要看数据手册,确认其Block0在出厂时保证无错,可与S3C2410配合使用,进行NAND方式的启动。 2410的手册上明白写着2410的NAND控制器可以自动LOAD 4K CODE到RAM,只是必须保证这4K FLASH 没坏块。nand FLASH手册,block0是保证出厂不是坏的,其他块就不保证了。,Nand Flash模式配置: (1)通过NFCONF寄存器设置NAND Flash配置; (2)将NAND Flash命令写入NFCONF寄存器; (3)将NAND Flash地址写入NFADDR寄存器; (4)通过NFSTAT寄存器检查NAND Flash状态,并读/写数据。在读操作之前或者编程操作之后应该检查R/nB信号。,Nand Flash控制器的软硬件应用:,硬件电路图:,K9F1208UoM :64M x 8 Bit NAND Flash Memory,相关寄存器:,6个控制寄存器; 配置寄存器NFCONF:配置Nand Flash模式; 指令寄存器NFCMD:设置Nand Flash指令; 地址寄存器NFADDR:设置Nand Flash地址; 数据寄存器NFDATA:缓冲Nand Flash数据; 状态寄存器NFSTAT:反映Nand Flash操作状态; ECC寄存器NFECC:Nand Flash错误纠正代码。,NAND FLASH CONFIGURATION (NFCONF) REGISTER,NAND Flash的地址组成 正如硬盘的盘片被分为磁道,每个磁道又分为若干扇区,一块Nand flash也分为若干block,每个block分为如干page。一般而言,block、page之间的关系随着芯片的不同而不同,典型的分配是这样的: 1block = 32page 1page = 512bytes(datafield) + 16bytes(oob) NandFlash以页为单位读写数据,而以块为单位擦除数据。按照k9f1208的组织方式可以分四类地址: Column Address、halfpage pointer、Page Address 、Block Address。,A0:25表示数据在64M空间中的地址。 Column Address表示数据在半页中的地址,大小范围0-255,用A0:7表示;halfpage pointer表示半页在整页中的位置,即在0-255空间还是在256-511空间,用A8表示;Page Address表示页在块中的地址,大小范围0-31,用A13:9表示; Block Address表示块在flash中的位置,大小范围04095,A25:14 表示。,以K9F1208为例,注意:容量倍增以后,并不是简单的地址扩展问题,A8也不是所有的Flash芯片中都不使用,K9F1G08中就完全不同。,读写示例:,NAND Flash寻址方式: A7:0组成的column address(列地址)访问页, 配合地址指针命令来选择特定区域。在进行擦除操作时不需要列地址。 A13:9访问32个page,即某page在块内的相对地址。Block的地址是由A14以上的bit来表示。 以K9F1208为例: 第1 步是传递column address,就是NAND_ADDR7:0,不需移位即可传递到I/O7:0上。 第2 步就是将NAND_ADDR 右移9位,将NAND_ADDR16:9传到I/O7:0上; 第3 步将NAND_ADDR24:17放到I/O上; 第4步需要将NAND_ADDR25放到I/O上; 因此,整个地址传递过程需要4 步才能完成,即4-step addressing。 如果NAND Flash 的容量是32MB(256Mbit)以下,那么,block adress最高位只到bit24,因此寻址只需要3步。,需要注意: 对于flash的读写都是以一个page开始的,但是在读写之前必须进行flash的擦写,而擦写则是以一个block为单位的。 Nand Flash芯片每一位只能从1变为0,而不能从0变为1,所以在对其进行写入操作之前一定要将相应块擦除(擦除就是将相应块的位全部变为1)。 OOB部分的第六字节(即517字节)标志是否坏块,如果不是坏块该值为FF,否则为坏块;除第六字节外,通常至少把其前3字节存放Nand Flash硬件ECC码。 当得到一个Nand Flash地址srcaddr时候,我们可以这样分解出Column Address和Page Address: columnaddr=srcaddr%512 /column address pageaddr=srcaddr9 /page address 也可以这么认为,一个Nand Flash地址的A0A7是它的column_addr,A9A25是它的Page Address。,#define rNFCONF (*(volatile unsigned *)0x4e000000) /nand flash configuration #define rNFCMD (*(volatile char *)0x4e000004 /nand flash command #define rNFADDR (*(volatile char *)0x4e000008 /nand flash address #define rNFDATA (*(volatile char *)0x4e00000c /nand flash data #define rNFSTAT (*(volatile unsigned *)0x4e000010 /nand flash opreation status #define rNFECC (*(volatile int *)0x4e000014 /nand flash ecc #define rNFECC0 (*(volatile char *)0x4e000014 #define rNFECC1 (*(volatile char *)0x4e000015 #define rNFECC2 (*volatile char *)0x4e000016,现在举一个例子,假设要从Nand Flash中的第5000字节处开始读取1024个字节到内存的0x30000000处,这样调用read函数: nf_read(5000, 0x30000000,1024); 分析5000这个src_addr,根据 : column_addr=src_addr%512; page_address=(src_addr9); 可得出column_addr=5000%512=392 page_address=(50009)=9 于是可以知道5000这个地址是在第9页的第392个字节处。 于是nf_read函数将这样发送命令和参数 column_addr=5000%512; page_address=(50009); NF_CMD=0x01; 从2nd half开始读取 NF_ADDR= column_addr 4th.Cycle A25,向NandFlash的命令寄存器和地址寄存器发送完以上命令和参数之后, 就可以从rNFDATA寄存器(NandFlash数据寄存器)读取数据了. 下面的代码进行数据的读取. for(i=column_addr;i512;i+) *buf+=NF_RDDATA(); 每当读取完一个Page之后,数据指针会落在下一个Page的0号Column(0号Byte).,例如实现一个从某字节处开始读取size大小的数据 static int NF_read(unsigned int src_addr,unsigned char *desc_addr,int size) int i; unsigned int column_addr = src_addr % 512; unsigned int page_address =(src_addr 9); unsigned char * buf = desc_addr; while(unsigned int)buf 255) NF_CMD(0x01); else NF_CMD(0x00); NF_ADDR(cloumn_addr ,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!