CPU只管操作地址,而有些地址代表的是某些存储设备. 但是操作这些存储设备需要很多东西,比如需要制定bank,行/列地址等.所以就有了存储管理器,用来处理这种CPU操作的地址和存储设备间的转换. (1)存储管理器在得到一个CPU的地址时,根据地址范围和自身的信息,知道这个地址位于那个片选. (2)若该片选连接的是一个SDRAM,还会根据地址范围和自身的信息,知道对应的如SDRAM中的BANK,行/列地址等. 所以,配置存储管理器 (3)根据芯片手册知道这个芯片的存储管理器的片选有8个,说明它可以…
GPIO分成很多组今天学习的这个芯片的GPIO有GPA-GPJ个组.具体可在芯片手册中看到. GPIO有很多寄存器,今天学习的这个芯片,他的寄存器分为以下几种类型: (1)端口控制寄存器 (2)端口数据寄存器 (3)PORT PULL-UP REGISTER 端口上拉寄存器 (4)MISCELLANEOUS CONTROL REGISTER 混杂的控制寄存器 (5)EXTERNAL INTERRUPT CONTROL REGISTER   外部中断控制寄存器 以上信息在芯片手册中获得. 接着介绍…
在裸板2440中,当我们使用nand启动时,2440会自动将前4k字节复制到内部sram中,如下图所示: 然而此时的SDRAM.nandflash的控制时序等都还没初始化,所以我们就只能使用前0~4095地址,在前4k地址里来初始化SDRAM,nandflash,初始化完成后,才能将nandflash的4096至后面的地址内容存放到SDRAM里去. 而裸板驱动的步骤如下所示: 1.写makefile 2.写lds链接脚本 (供makefile调用) 3.写真正要执行的文件代码,比如初始化nand…
在裸板2440中,当我们使用nand启动时,2440会自动将前4k字节复制到内部sram中,如下图所示: 然而此时的SDRAM.nandflash的控制时序等都还没初始化,所以我们就只能使用前0~4095地址,在前4k地址里来初始化SDRAM,nandflash,初始化完成后,才能将nandflash的4096至后面的地址内容存放到SDRAM里去. 而裸板驱动的步骤如下所示: 1.写makefile 2.写lds链接脚本 (供makefile调用) 3.写真正要执行的文件代码,比如初始化nand…
1.UART原理说明 发送数据时,CPU将并行数据写入UART,UART按照一定的格式在一根电线上串行发出:接收数据时,UART检测另一根电线上的信号,串行收集然后放在缓冲区中,CPU即可读取UART获得这些数据.UART之间以全双工方式传输数据,最精确的连线方法只有3根电线:TxD用于发送数据,RxD用于接收数据,Gnd用于给双发提供参考电平,连线如下: UART使用标准的TTL/CMOS逻辑电平(0~5v.0~3.3v.0~2.5v或0~1.8v)来表示数据,高电平表示1,低电平表示0.为了…
MMU(Memory Management Unit,内存管理单元),操作系统通过使用处理器的MMU功能实现以下:1)虚拟内存.有了虚拟内存,可以在处理器上运行比实际物理内存大的应用程序.为了使用虚拟内存,操作系统通常要设置一个交换分区(通常是硬盘),通过将不活跃的内存中的数据放入交换分区,操作系统可以腾出其空间来为其它的程序服务.虚拟内存是通过虚拟地址来实现的.2)内存保护.根据需要对特定的内存区块的访问进行保护,通过这一功能,我们可以将特定的内存块设置成只读.只写或是可同时读写. 实验平台:…
以往2440和6410的启动方式,只要我们把裸板代码烧写到NAND FLASH的开始位置,当开发板上点启动时,处理器会自动从NAND FLASH上拷贝前面一段的代码到内部的RAM中执行.按照以前的方法,我写了一段汇编代码,如下: 1_ARM/1_start/start.S #define WTCON 0xE2700000 .text .align .global _start _start: //close the watchdog ldr r1, =WTCON str r0, [r1] loo…
使用fifo的好处有: 1:串口的数据发送的数据量较大时,使用fifo可以大大降低MCU的开销.(有点类似串入并出的cput处理模型,本质上还是串行收发) 2:在某些特殊场合,例如制定较复杂的协议时,可以使用fifo特性来做协议简化,比如一包 数据包含8个字节,(并且fifo设置的长度为8),这样相当于把uart转换为类似CAN/以太网模型, 这样信息可扩展性得到了质的提高,当然,这里需要同步协调.  fifo分析拓展: 1. 如果要用中断来处理接收到的数据,就是说,接收完数据然后产生中断,再于…
在裸板下使用 SPI 的话,有两种方法可选: 使用 IO 口模拟 SPI 进行操作 使用 SPI 控制器进行操作 这里我们选用控制器的方式,简单方便. 初始化 SPI static void SPIControllerInit(void) { /* 设置频率 */ SPPRE0 = 2; SPPRE1 = 2; /* 配置 SPI */ SPCON0 = (1<<4) | (1<<3); SPCON1 = (1<<4) | (1<<3); } 如手册所示,频…
关于NAND FLASH的结构是以页为单位写,以块为单位来擦除: 1Gb     为大页   page=2048Kb    BLOCK=128K 512Mb 为小页   page=512byte    BLOCK=16K PS:一页还有额外64字节OOB块,通常不计入读取范围. 另一个区别就是ECC的验证: ECC是每256个字节生产一个24位的值.NAND FLASH在写的时候会生成一个原始的ECC值保存在页的SPARE区,当要读页时也会生产一个ECC值,会跟SPARE的值进行异或比较,看结果…