分享

BootLoader各步骤的原理及实现方法

 心不留意外尘 2017-10-06
http://blog./uid-7596337-id-125798.html
2010
1屏蔽中断
1.1如何屏蔽
  A:CPSR的I、F位,置1表示屏蔽
1.2和模式的关系
  A:七种模式-USR,SYS,SVC,IRQ,FIQ,UND,ABT。进入SVC默认模式,低五位M[0-4]值10011
1.3何种汇编
  A:MRS,从CPSR寄存器读取值,ORR,MSR写回,CPSRc。
2 关闭看门狗
2.1 如何关闭
  A:查阅s3c2440 SOC芯片数据手册,找到watchdoor寄存器的使能,对该位清0表示关闭。
2.2 地址多少
  A:0x53000000
2.3 不关有何问题?
  A:倒计时的计数器到时后自动重启开发板,大概7,8秒左右。
3 设置时钟
3.1 时钟是什么?谁产生?
  A:固定频率的晶体。
3.2 有什么用?如何设? 
  A:给ARM内核提供clock-FCLK,给系统高速总线提供HLCK,给外设低速总线提供-PCLK。
3.3 如何设clock?
  A:确定系统输入时钟的频率,确定3类时钟的分频比,配置相关的寄存器,在s3c2440上的系统 时钟是12MHz,6:2:1,PLL控制寄存器MPLLCON,UPLLCON(MDIV,PDIV,SDIV),CLKCON, CLKDIVN,CAMDIVN
4。关蜂鸣器
4.1 怎样关寄存器
  A:查看硬件设计的原理图(电路图),确定蜂鸣器的连接位置(是和哪个GPIO的引脚相连),查 看芯片的datasheet,找到这个GPIO引脚所对应的配置寄存器(GPBCON),确定设置哪些位来对该 寄存器进行配置。
4.2 如何设置寄存器
  A:1-设置GPBCON寄存器,设置bit0和bit1为输出,value是01表示输出output
  2-设置GPBDAT寄存器,设置bit0,value是0,表示输出低电平,根据电路图,低电平就可以关 闭蜂鸣器。
5. 设置堆栈
5.1 堆栈有什么用
 A:因为C语言运行需要栈,函数调用的时候。(1.函数传递参数-超过4个参数的时候,2.局部变 量的时候-必须要用栈来存放变量的时候,例如数组)
5.2 怎样设置堆栈
 B:Mov sp, #0x1000;一般来说,在进入C之前,跳转到C(主函数)函数之前,设置好sp.sp的 地址值应该是按字对齐。SP地址必须是设置到SRAM或者SDRAM,设置在高端的地址上,编译器一般压栈是采用FD(满递减)的方式。
6.设置串口
6.1 串口有什么用
 A:能够串行地接收和发送数据,因为它足够简单,历史的原因。
6.2 串口的工作原理,传送机制是什么
 A:发送数据,写到缓存寄存器bufferREG,从buffer拷贝到移位寄存器shifterREG,从发送数据线 (按bit发送,根据异步时钟CLK)传送出去,等待一段时间,传送过程结束。未结束之前,不能 继续写入。
6.3 串口的帧格式样(Frame)是什么?
 A:1个起始位,5~8个数据位,1个可选的奇偶校验位,1-2个停止位。
6.4 S3C2440的串口是怎样的?
 A:2440有3个串口,每个uart都可以工作在中断模式和DMA模式。换言之,UART可以生成一个中  断或DMA 请求用于 CPU 和 UART之间的数据传输。UART使用系统时钟可以支持最高 115.2Kbps的  波特率。如果一个外部设备提供UEXTCLK给UART,UART可以在更高的速度下工作。每个 UART通道 对于接收器和发送器包括了 2个 64位的FIFO。
6.5 如何去设置s3c2440的uart0工作?
 A:查阅芯片手册,设置串口的控制寄存器(工作参数--数据位,停止位,奇偶校验位,波特率 ,工作模式),设置串口的发送接收管脚Pin (IO管脚的功能复用)。
6.6 如何实现串口的读写功能?
 A:getchar和putchar函数实现:写操作下:先查看状态寄存器,根据发送结束位(发送寄存器 为空位),等待到该位被设置为空的时候,读操作下,先查看状态寄存器,根据接收结束位(接 收寄存器为满位),等待到该位被设置为满的时候。
7.xmodem协议
7.1 为什么会有?什么modem协议?
 A:1-文件大小的问题(文件结束传输的问题)。2-数据包丢失的问题(序号的补码)。3-电流 干扰导致数据出错的问题(算术校验和)。 总结:解决文件大、长距离、恶劣环境下的数据不 出错的问题。
7.2 相关协议有哪些?
 A:xmodem-1k,ymodem,zmodem,kermit协议
7.3 xmodem协议的帧结构?
 A:1字节的SOH起始位,1个字节的数据包序号,1个字节的序号的补码,128个字节的数据,1个 字节的校验。
7.4 传送过程是怎样的?
 A:1-接受方发NAK,2-发送方发第一帧数据,3-接收方回复ACK,4-发送方发第二帧,5-6,重复  3-4的步骤,直到结束,End-发送方发EOT,接收方发ACK确认。
    重发机制:如果接收方发现数据包出错,发NAK,然后发送方重发当前的数据。
7.5 控制字有哪些,有什么用?
 A:SOH-帧的开头字节。EOT-结束标志字节。ACK-确认字节。NAK-重发请求字节。CAN-中止传输 字节。
8. SDRAM初始化
8.1 什么是SDRAM?为什么要用SDRAM?
 A:SDRAM(Synchronous Dynamic Random Access Memory,同步动态随机存储器)。因为SRAM容 易小,价格贵,无法适应大规模的程序开发)。
8.2 SDRAM的工作原理、控制机制是什么?
 A:从总线传送的地址,通过行地址和列地址进行寻址,存储结构是4个bank,每个bank是4M大小 ,每个存储单元是16bit,接收地址省略了0,1这2个位,使得寻址按4个字节对齐,它的时钟是分 2个clock分别寻址,由2个SDRAM器件组成,每个32M存储空间,分别存放一个word的高2字节和低 2字节,共同组成64M的SDRAM空间。
 0x30000000--前13位是行地址,后9位是列地址。通过内存控制器。之所以分行地址和列地址, 是为了地址线的分时复用。
8.3 如何初始化SDRAM器件?
 A:查阅SDRAM器件的数据手册,设置s3c2440和内存控制器相关的13个寄存器,赋初始化控制值  ,包括总线宽度、等待状态、SDRAM的刷新频率、控制寄存器选择bank6、bank7。可调整的bank 大小。模式寄存器(CAS latency去查sdram器件的芯片手册-时序图)。
 
8.4 程序如何从SRAM跳到SDRAM上运行?
 A:1-设置链接器armlink的-ro-base参数,使得ro-base从0x30000000(sdram)开始,2-在程序 中,定义一个跳转的标识符on_the_ram,这其实就是定义了一个绝对地址在SDRAM中,3-设置PC寄存器为刚才那个绝对地址(on_the_ram(0x3000xxxx))。ldr pc, =on_the_ram。
9.实现NAND flash->SDRAM的搬移
9.1 什么是NAND FLASH,为什么要用它?
 A:NAND flash是ROM的一种。因为它容量大,价格便宜,并且掉电后不丢失数据,可进行在线的 编程。
9.2 NAND flash要不要初始化?如果要,怎么初始化?
 A:要初始化。看s3c2440的芯片手册,找到NAND flash控制器中相应的寄存器,对控制寄存器 CONF进行设置,设置Buswidth,Addcycle,Pagesize...。
9.3 如何实现flash的读操作?
 A:1-先通读一下硬件原理图,找到NANDflash的连接图,了解flash的接口。
   2-查找NAND flash 的芯片手册,找到相应接口pin管脚的含义。
   3-提出一个问题,IO0-IO7如何表示对一个地址的读写操作?
     (1)flash是以Page页为单位,进行读写操作。
     (2)对40k空间,进行计算,得到需要进行80次页操作(读)。
     (3)对一个页page的读,找到对应的READ Flow Chart读操作的控制流程。
9.4 NAND flash的数据存储是怎样的?
 A:最小的单位是一个页Page=512bytes+16byteREG。按32Pages组成一个Block。一个flash器件 内部可以包含4096个blocks,最大容量为512M。
9.5Nand Flash(k9f1208)和NorFlash(sst39vf160)有何不同?
 A:首先查看2种Flash的Datesheet,找到2个器件的外围管脚pin的定义说明,通过对比发现, NorFlash有独立的地址线和数据线,Nandflash是IOn管脚进行复用。Norflash没有命令锁存和地 址锁存。NorFlash的读操作和SRAM一致,可以用来存放启动代码。NorFlash的写操作类似于 NANDflash,对NorFlash进行写操作,不能使用str,必须进行编程(program)。
9.6相比用NorFlash存放启动代码,NandFlash用于启动有何优缺点?
 A:NandFlash要比NorFlash慢一点,因为它是IO复用方式,比直接的总线读写要慢。NandFlash  能够启动,必须要靠SRAM,同时还必须有NandFlash的控制器在启动的时候帮助进行copy。
 优点是容量大,可以存放更多启动代码,或者更大的操作系统,文件系统,因为有了NandFlash  和SRAM,SDRAM的配合启动方式,使得减少了NorFlash的使用,慢慢不用。
9.7我们采用的Nandflash的外部引脚是怎样的?
 A:IO0-IO7表示输入输出(命令字、地址(块block地址,页page地址)、数据),CLE:命令锁  存,ALE:地址锁存,RE:读使能,WE:写使能,R/Busy:忙。区别于NorFlash:没有地址线和数据线。
9.8NandFlash的1Page和1block多大?
 A:1Page:512字节+16字节=528字节。1block:32个page页,约16K字节。
9.9NandFlash的地址线和数据线是如何区分的?
 A:首先数据和地址都是通过IO0-IO7这八个管脚进行传输的,区别数据和地址主要看NandFlash 的操作(控制)流程图FlowChart,根据最开始写入的命令字来区分。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多