arm裸机块设备

RAM 内存
ROM 外存

NorFlash(可总线式访问)
NandFlash(块设备) SLC 可靠性高,缺点是容量做不大
MLC 容量可以做很大很便宜

SD卡与SRAM/DDR/SROM之类的东西的不同:SRAM/DDR/SROM之类的存储芯片是总线式的,只要连接上初始化好之后就可以由SoC直接以地址方式来访问;但是SD卡不能直接通过接口给地址来访问,它的访问需要按照一定的接口协议(时序)来访问。
SD卡支持两种读写协议:SD协议和SPI协议。
SPI协议特点(低速、接口操作时序简单、适合单片机)
SD协议特点(高速、接口时序复杂,适合有SDIO接口的SoC)

S5PV210的SD/MMC控制器
(1)数据手册Section8.7,为SD/MMC控制器介绍。
(2)SD卡内部除了存储单元Flash外,还有SD卡管理模块,我们SoC和SD卡通信时,通过9针引脚以SD协议/SPI协议向SD卡管理模块发送命令、时钟、数据等信息,然后从SD卡返回信息给SoC来交互。工作时每一个任务(譬如初始化SD卡、譬如读一个块、譬如写、譬如擦除····)都需要一定的时序来完成(所谓时序就是先向SD卡发送xx命令,SD卡回xx消息,然后再向SD卡发送xx命令····)

命令码

arm裸机块设备_第1张图片

坏块检查

(1)Flash使用之前要先统一擦除(擦除的单位是块)。Flash类设备擦除后里面全是1,所以擦干净之后读出来的值是0xff。
(2)检查坏块的思路就是:先块擦除,然后将整块读出来,依次检测各自节是否为0xff,如果是则表明不是坏块,如果不是则表明是坏块。
arm裸机块设备_第2张图片

页写

(1)写之前确保这个页是被擦除干净的。如果不是擦除干净的(而是脏的、用过的)页,写进去的值就是错的,不是你想要的结果。
(2)写操作(write)在flash的操作中就叫编程(program)
(3)SoC写Flash时通过命令线、IO线依次发送写命令、写页地址、写数据等进入NandFlash。
(4)写的过程:SOC通过Nand控制器和Nand芯片完成顺序对接,然后按照时序要求将一页数据发给Nand芯片内部的接口电路。接口电路先接收收据到自己的缓冲区,然后再集中写入Nand芯片的存储区域中。Nand接口电路将一页数据从缓冲区中写入Nand存储系统中需要一定的时间,这段时间Nand芯片不能再响应SOC发过来的其他命令,所以SoC要等待Nnad接口电路忙完。等待方法是SoC不断读取状态寄存器(这个状态寄存器有2种情况:一种是SoC的Nand控制器自带的,另一种是SoC通过发命令得到命令响应得到的),然后通过检查这个状态寄存器的状态位就能知道Nand接口电路刚才写的那一页数据写完了没、写好了没。直到SoC收到正确的状态寄存器响应才能认为刚才要写的那一页数据已经ok。(如果SoC收到的状态一直不对,可以考虑重写或者认为这一页所在的块已经是坏块,或者整个Nand芯片已经挂掉了)。
(5)正常情况下到了第四步就已经完了。但是因为Nand的读写有不靠谱情况,因此我们为了安全会去做ECC校验。ECC校验有硬件式校验和软件式校验2种。软件式校验可以采用的策略有很多,其中之一(Nand芯片手册上推荐的方式是):将刚才写入的1页数据读出来,和写入的内容进行逐一对比。如果读出的和写入的完全一样,说明刚才的写入过程正确完成了;如果读出来的和写入的不完全一样那就说明刚才的写入有问题。
(6)硬件式ECC:SoC的Nand控制器可以提供硬件式ECC(这个也是比较普遍的情况)。硬件式ECC就是在Nand的控制器中有个硬件模块专门做ECC操作。当我们操作Nand芯片时,只要按照SoC的要求按时打开ECC生成开关,则当我们写入Nand芯片时SoC的Nand控制器的ECC模块会自动生成ECC数据放在相应的寄存器中,然后我们只需要将这生成的ECC数据写入Nand芯片的带外数据区即可;在将来读取这块Nand芯片时,同样要打开硬件ECC开关,然后开始读,在读的过程当中硬件ECC会自动计算读进来的一页数据的ECC值并将之放到相应的寄存器中。然后我们再读取带外数据区中原来写入时存入的ECC值,和我们刚才读的时候得到的ECC值进行校验。校验通过则说明读写正确,校验不通过则说明不正确(放弃数据或者尝试修复)。
arm裸机块设备_第3张图片

擦除(erase)操作

(1)擦除时必须给块对齐的地址。如果给了不对齐的地址,结果是不可知的(有些Nand芯片没关系,它内部会自动将其对齐,而有些Nand会返回地址错误)。
(2)读写时给的地址也是一样,要求是页对齐地址。如果给了不对齐的,也是有可能对有可能错。
arm裸机块设备_第4张图片

页读

arm裸机块设备_第5张图片

nandflash控制器

nand芯片是通过nand接口电路进行读写的,nand接口电路和soc之间通过nand接口时序来通信的,nand接口时序相对复杂,如果要用软件来编,很难保证时序能满足,会不稳定,也难写。所以soc内部集成了一个nand控制器。
arm裸机块设备_第6张图片
在这里插入图片描述
框图分析
通过对SFR特殊寄存器进行读写来产生nand接口时序
nand flash interface 接口硬件,将nand芯片相对应的引脚进行连接
ECC生成器。

主要寄存器分析

NFCONF 主要用来配置nand接口
NFCONT 接口控制的控制,主要有接口时序。

NFCMMD 用来发命令的
NFADDR 用来发地址的(一般有4、5个Cycle,每次发一个Cycle,每个Cycle八个位)
NFDATA 用来读写数据的。读出来的一个字节的数据存放在这里。

NFMECCD0
NFMECCD1 产生ECCdata(数据)的(这是主数据区(也就是2K那的)的ECC) 这个ECC存放在带外数据区。

NFSECCD 产生ECCdata(数据)的(这是次数据区(也就是64 B那的)的ECC)这个ECC存放在哪呢,,也放在带外数据区。
(因为64B的带外数据区就是存放这些东西的)

NFSTAT 状态寄存器,这里边的值主要来自nand接口电路

没用到暂时
NFSBLK 存放块地址的
NFEBLK 可编程的结束块地址寄存器,

SD/iNand

CMD与ACMD
这两种都是命令码,CND是单命令命令,就是单独发一个CMD即可表示的意思,ACMD是一种扩展,就是需要发两个CND表示一个意思(就是ACMD),即ACMDz = CMDy +CMDx.

1.11.8.3、卡状态
(1)SD卡内部的接口控制器类似于一个单片机,这个单片机其实是一个状态机。所以SD卡任何时候都属于某一种状态(空闲状态、准备好状态、读写状态、出错状态·……都是事先定义好的.在这种状态下能够接受的命令是一定的,接受到命令之后执行一定的操作然后根据操作结果会跳转为其他状态.如果主机发过来的命令和当前状态丕符状态机就不响应.如果收到命令和当前状态相符就会执行相应操作.执行完之后根据结果跳转为基他状态。
arm裸机块设备_第7张图片
arm裸机块设备_第8张图片

《1.10.ARM裸机第十部分-SD卡启动详解》

第一部分、章节目录
1.10.1.主流的外存设备介绍
1.10.2.SD卡的特点和背景知识
1.10.3.SD卡的编程接口
1.10.4.S5PV210的SD卡启动详解1
1.10.5.S5PV210的SD卡启动详解2
1.10.6.S5PV210的SD卡启动实战1
1.10.7.S5PV210的SD卡启动实战2
1.10.8.解决X210开发板的软开关按键问题

第二部分、章节介绍
1.10.1.主流的外存设备介绍
本节主要讲解目前为止出现过的主流外部存储设备如磁存储设备、Flash类存储设备以及其主要特点。
1.10.2.SD卡的特点和背景知识
本节主要讲解SD卡的简单背景,以及SD卡与MMC卡,SD卡与TF卡、MicroSD卡等的关联和区别。
1.10.3.SD卡的编程接口
本节从编程角度讲解SD卡的接口特征,SD协议和SPI协议访问SD卡的各自特点,主要目标是希望大家搞清楚SD卡的时序式访问和SRAM/DDR等的总线式访问的区别。
1.10.4.S5PV210的SD卡启动详解1
本节介绍S5PV210的S卡启动的基础知识,通过回顾S5PV210的iROM application note文档中的启动过程描述,来分析SD卡启动的方法。
1.10.5.S5PV210的SD卡启动详解2
本节着重讲解扇区和块的概念,试图让大家建立块设备的概念,并且明白Flash的以块为单位进行读写的操作特征。
1.10.6.S5PV210的SD卡启动实战1
本节详细分析210的iROM中的block device copy function及其使用细节,为编程实战打好基础,同时将编程中的细节参数都确定好。
1.10.7.S5PV210的SD卡启动实战2
本节带大家从零开始写代码并进行调试,实现分散加载的SD卡启动。
1.10.8.解决X210开发板的软开关按键问题
本节讲解X210开发板的软启动开关电路设计原理,通过分析教会大家如何在原有程序中添加代码来实现开发板置锁,以解决要不停按下POWER按键给开发板供电的问题。

第三部分、随堂记录
1.10.1.主流的外存设备介绍
内存和外存的区别:一般是把这种RAM(random access memory,随机访问存储器,特点是任意字节读写,掉电丢失)叫内存,把ROM(read only memory,只读存储器,类似于Flash SD卡之类的,用来存储东西,掉电不丢失,不能随机地址访问,只能以块为单位来访问)叫外存
1.10.1.1、软盘、硬盘、光盘、CD、磁带
(1)存储原理大部分为磁存储,缺点是读写速度、可靠性等。优点是技术成熟、价格便宜。广泛使用在桌面电脑中,在嵌入式设备中几乎无使用。
(2)现代存储的发展方向是Flash存储,闪存技术是利用电学原理来存储1和0,从而制成存储设备。所以闪存设备没有物理运动(硬盘中的磁头),所以读写速度可以很快,且无物理损耗。
1.10.1.2、纯粹的Flash:NandFlash、NorFlash
(1)这些是最早出现的、最原始的Flash颗粒组成芯片。也就是说NandFlash、NorFlash芯片中只是对存储单元做了最基本的读写接口,然后要求外部的SoC来提供Flash读写的控制器以和Flash进行读写时序。
(2)缺陷:1、读写接口时序比较复杂。2、内部无坏块处理机制,需要SoC自己来管理Flash的坏块;3、各家厂家的Flash接口不一致,甚至同一个厂家的不同型号、系列的Flash接口都不一致,这就造成产品升级时很麻烦。
(3)NandFlash分MLC和SLC两种。SLC技术比较早,可靠性高,缺点是容量做不大(或者说容量大了太贵,一般SLC Nand都是512MB以下);MLC技术比较新,不成熟,可靠性差,优点是容量可以做很大很便宜,现在基本都在发展MLC技术。
1.10.1.3、SD卡、MMC卡、MicroSD、TF卡
(1)这些卡其实内部就是Flash存储颗粒,比直接的Nand芯片多了统一的外部封装和接口。
(2)卡都有统一的标准,譬如SD卡都是遵照SD规范来发布的。这些规范规定了SD卡的读写速度、读写接口时序、读写命令集、卡大小尺寸、引脚个数及定义。这样做的好处就是不同厂家的SD卡可以通用。
1.10.1.4、iNand、MoviNand、eSSD
(1)电子产品如手机、相机等,前些年趋势是用SD卡/TF卡等扩展存储容量;但是近年来的趋势是直接内置大容量Flash芯片而不是外部扩展卡。
(2)外部扩展卡时间长了卡槽可能会接触不良导致不可靠。
(3)现在主流的发展方向是使用iNand、MoviNand、eSSD(还有别的一些名字)来做电子产品的存储芯片。这些东西的本质还是NandFlash,内部由Nand的存储颗粒构成,再集成了块设备管理单元,综合了SD卡为代表的各种卡的优势和原始的NandFlash芯片的优势。
(4)优势:1、向SD卡学习,有统一的接口标准(包括引脚定义、物理封装、接口时序)。2、向原始的Nand学习,以芯片的方式来发布而不是以卡的方式;3、内部内置了Flash管理模块,提供了诸如坏块管理等功能,让Nand的管理容易了起来。
1.10.1.5、SSD(固态硬盘)

1.10.2.SD卡的特点和背景知识
1.10.2.1、SD卡和MMC卡的关系
(1)MMC标准比SD标准早,SD标准兼容MMC标准。
(2)MMC卡可以被SD读卡器读写,而SD卡不可以被MMC读卡器读写。
1.10.2.2、SD卡和Nand、Nor等Flash芯片差异
(1)SD卡/MMC卡等卡类有统一的接口标准,而Nand芯片没有统一的标准(各家产品会有差异)
1.10.2.3、SD卡与MicroSD的区别
(1)体积大小区别而已,传输与原理完全相同。
1.10.2.4、SD卡与TF卡的区别
(1)外观上,SD卡大而TF卡小;用途上,SD卡用于数码相机等而TF卡广泛用于手机、GPS等;
(2)时间上,SD卡1999年推出,TF卡于2004年推出;SD卡由日本松下、东芝与美国SanDisk共同推出,而TF卡由Motorola与SanDisk共同推出。
(3)SD卡有写保护而TF卡没有,TF卡可以通过卡套转成SD卡使用。

1.10.3.SD卡的编程接口
1.10.3.1、SD卡的物理接口
(1)SD卡由9个针脚与外界进行物理连接,这9个脚中有2个地,1个电源,6个信号线。
1.10.3.2、SD协议与SPI协议
(1)SD卡与SRAM/DDR/SROM之类的东西的不同:SRAM/DDR/SROM之类的存储芯片是总线式的,只要连接上初始化好之后就可以由SoC直接以地址方式来访问;但是SD卡不能直接通过接口给地址来访问,它的访问需要按照一定的接口协议(时序)来访问。
(2)SD卡虽然只有一种物理接口,但是却支持两种读写协议:SD协议和SPI协议。

1.10.3.3、SPI协议特点(低速、接口操作时序简单、适合单片机)
(1)SPI协议是单片机中广泛使用的一种通信协议,并不是为SD卡专门发明的。
(2)SPI协议相对SD协议来说速度比较低。
(3)SD卡支持SPI协议,就是为了单片机方便使用。

1.10.3.4、SD协议特点(高速、接口时序复杂,适合有SDIO接口的SoC)
(1)SD协议是专门用来和SD卡通信的。
(2)SD协议要求SoC中有SD控制器,运行在高速率下,要求SoC的主频不能太低。

1.10.3.5、S5PV210的SD/MMC控制器
(1)数据手册Section8.7,为SD/MMC控制器介绍。
(2)SD卡内部除了存储单元Flash外,还有SD卡管理模块,我们SoC和SD卡通信时,通过9针引脚以SD协议/SPI协议向SD卡管理模块发送命令、时钟、数据等信息,然后从SD卡返回信息给SoC来交互。工作时每一个任务(譬如初始化SD卡、譬如读一个块、譬如写、譬如擦除····)都需要一定的时序来完成(所谓时序就是先向SD卡发送xx命令,SD卡回xx消息,然后再向SD卡发送xx命令····)

1.10.4.S5PV210的SD卡启动详解1
1.10.4.1、SoC为何要支持SD卡启动
(1)一个普遍性的原则就是:SoC支持的启动方式越多,将来使用时就越方便,用户的可选择性就越大,SoC的适用面就越广。
(2)SD卡有一些好处:譬如可以在不借用专用烧录工具(类似Jlink)的情况下对SD卡进行刷机,然后刷机后的SD卡插入卡槽,SoC既可启动;譬如可以用SD卡启动进行量产刷机(量产卡)。像我们X210开发板,板子贴片好的时候,内部iNand是空的,此时直接启动无启动;板子出厂前官方刷机时是把事先做好的量产卡插入SD卡卡槽,然后打到iNand方式启动;因为此时iNand是空的所以第一启动失败,会转而第二启动,就从外部SD2通道的SD卡启动了。启动后会执行刷机操作对iNand进行刷机,刷机完成后自动重启(这回重启时iNand中已经有image了,所以可以启动了)。刷机完成后SD量产卡拔掉,烧机48小时,无死机即可装箱待发货。

1.10.4.2、SD卡启动的难点在哪里(SRAM、DDR、SDCard)
(1)SRAM、DDR都是总线式访问的,SRAM不需初始化既可直接使用而DDR需要初始化后才能使用,但是总之CPU可以直接和SRAM/DRAM打交道;而SD卡需要时序访问,CPU不能直接和SD卡打交道;NorFlash读取时可以总线式访问,所以Norflash启动非常简单,可以直接启动,但是SD/NandFlash不行。
(2)以前只有Norflash可以作为启动介质,台式机笔记本的BIOS就是Norflash做的。后来三星在2440中使用了SteppingStone的技术,让Nandflash也可以作为启动介质。SteppingStone(翻译为启动基石)技术就是在SoC内部内置4KB的SRAM,然后开机时SoC根据OMpin判断用户设置的启动方式,如果是NandFlash启动,则SoC的启动部分的硬件直接从外部NandFlash中读取开头的4KB到内部SRAM作为启动内容。
(3)启动基石技术进一步发展,在6410芯片中得到完善,在210芯片时已经完全成熟。210中有96KB的SRAM,并且有一段iROM代码作为BL0,BL0再去启动BL1(210中的BL0做的事情在2440中也有,只不过那时候是硬件自动完成的,而且体系没有210中这么详细)。

1.10.4.3、S5PV210的启动过程回顾
(1)210启动首先执行内部的iROM(也就是BL0),BL0会判断OMpin来决定从哪个设备启动,如果启动设备是SD卡,则BL0会从SD卡读取前16KB(不一定是16,反正16是工作的)到SRAM中去启动执行(这部分就是BL1,这就是steppingstone技术)
(2)BL1执行之后剩下的就是软件的事情了,SoC就不用再去操心了。

1.10.4.4、SD卡启动流程(bin文件小于16KB时和大于16KB时)
(1)启动的第一种情况是整个镜像大小小于16KB。这时候相当于我的整个镜像作为BL1被steppingstone直接硬件加载执行了而已。
(2)启动的第二种情况就是整个镜像大小大于16KB。(只要大于16KB,哪怕是17KB,或者是700MB都是一样的)这时候就要把整个镜像分为2部分:第一部分16KB大小,第二部分是剩下的大小。然后第一部分作为BL1启动,负责去初始化DRAM并且将第二部分加载到DRAM中去执行(uboot就是这样做的)。
1.10.4.5、最重要的但是却隐含未讲的东西
(1)问题:iROM究竟是怎样读取SD卡/NandFlash的?
(2)三星在iROM中事先内置了一些代码去初始化外部SD卡/NandFlash,并且内置了读取各种SD卡/NandFlash的代码在iROM中。BL0执行时就是通过调用这些device copy function来读取外部SD卡/NandFlash中的BL1的。

1.10.5.S5PV210的SD卡启动详解2
1.10.5.1、SoC支持SD卡启动的秘密(iROM代码)
(1)三星系列SoC支持SD卡/NandFlash启动,主要是依靠SteppingStone技术,具体在S5PV210中支持steppingstone技术的是内部的iROM代码。
1.10.5.2、再看iROM application note:block device copy function

1.10.5.3、扇区和块的概念
(1)早期的块设备就是软盘硬盘这类磁存储设备,这种设备的存储单元不是以字节为单位,而是以扇区为单位。磁存储设备读写的最小单元就是扇区,不能只读取或写部分扇区。这个限制是磁存储设备本身物理方面的原因造成的,也成为了我们编程时必须遵守的规律。
(2)一个扇区有好多个字节(一般是512个字节)。早期的磁盘扇区是512字节,实际上后来的磁盘扇区可以做的比较大(譬如1024字节,譬如2048字节,譬如4096字节),但是因为原来最早是512字节,很多的软件(包括操作系统和文件系统)已经默认了512这个数字,因此后来的硬件虽然物理上可能支持更大的扇区,但是实际上一般还是兼容512字节扇区这种操作方法。
(3)一个扇区可以看成是一个块block(块的概念就是:不是一个字节,是多个字节组成一个共同的操作单元块),所以就把这一类的设备称为块设备。常见的块设备有:磁存储设备硬盘、软盘、DVD和Flash设备(U盘、SSD、SD卡、NandFlash、Norflash、eMMC、iNand)
(4)linux里有个mtd驱动,就是用来管理这类块设备的。
(5)磁盘和Flash以块为单位来读写,就决定了我们启动时device copy function只能以整块为单位来读取SD卡。

1.10.5.4、用函数指针方式调用device copy function
(1)第一种方法:宏定义方式来调用。好处是简单方便,坏处是编译器不能帮我们做参数的静态类型检查。
(2)第二种方法:用函数指针方式来调用。

1.10.6.S5PV210的SD卡启动实战1
1.10.6.1、任务:大于16KB的bin文件使用SD卡启动
(1)总体思路:将我们的代码分为2部分:第一部分BL1小于等于16KB,第二部分为任意大小,iROM代码执行完成后从SD卡启动会自动读取BL1到SRAM中执行;BL1执行时负责初始化DDR,然后手动将BL2从SD卡copy到DDR中正确位置,然后BL1远跳转到BL2中执行BL2.
(2)细节1:程序怎么安排?程序整个分为2个文件夹BL1和BL2,各自管理各自的项目。
(3)细节2:BL1中要完成:关看门狗、设置栈、开iCache、初始化DDR、从SD卡复制BL2到DDR中特定位置,跳转执行BL2.
(4)细节3:BL1在SD卡中必须从Block1开始(Block0不能用,这个是三星官方规定的),长度为16KB内,我们就定为16KB(也就是32个block);BL1理论上可以从33扇区开始,但是实际上为了安全都会留一些空扇区作为隔离,譬如可以从45扇区开始,长度由自己定(实际根据自己的BL2大小来分配长度,我们实验时BL2非常小,因此我们定义BL2长度为16KB,也就是32扇区)。
(5)细节4:DDR初始化好之后,整个DDR都可以使用了,这时在其中选择一段长度足够BL2的DDR空间即可。我们选0x23E00000(因为我们BL1中只初始化了DDR1,地址空间范围是0x20000000~0x2FFFFFFF)。

1.10.6.2、代码划分为2部分(BL1和BL2)

1.10.6.3、BL1中的重定位

1.10.6.4、BL2远跳转
(1)因为我们BL1和BL2其实是2个独立的程序,链接时也是独立分开链接的,所以不能像以前一样使用ldr pc, =main这种方式来通过链接地址实现元跳转到BL2.
(2)我们的解决方案是使用地址进行强制跳转。因为我们知道BL2在内存地址0x23E00000处,所以直接去执行这个地址即可。

1.10.7.S5PV210的SD卡启动实战2
1.10.7.1、烧录启动实验
1.10.7.2、代码分为2部分启动(上一节讲的)的缺陷
(1)代码分为2部分,这种技术叫分散加载。这种分散加载的方法可以解决问题,但是比较麻烦。
(2)分散加载的缺陷:第一,代码完全分2部分,完全独立,代码编写和组织上麻烦;第二,无法让工程项目兼容SD卡启动和Nand启动、NorFlash启动等各种启动方式。
1.10.7.3、uboot中的做法
(1)第二种思路:程序代码仍然包括BL1和BL2两部分,但是组织形式上不分为2部分而是作为一个整体来组织。它的实现方式是:iROM启动然后从SD卡的扇区1开始读取16KB的BL1然后去执行BL1,BL1负责初始化DDR,然后从SD卡中读取整个程序(BL1+BL2)到DDR中,然后从DDR中执行(利用ldr pc, =main这种方式以远跳转从SRAM中运行的BL1跳转到DDR中运行的BL2)。

1.10.7.4、再来分析uboot的SD卡启动细节
(1)uboot编译好之后有200多KB,超出了16KB。uboot的组织方式就是前面16KB为BL1,剩下的部分为BL2.
(2)uboot在烧录到SD卡的时候,先截取uboot.bin的前16KB(实际脚本截取的是8KB)烧录到SD卡的block1~bolck32;然后将整个uboot烧录到SD卡的某个扇区中(譬如49扇区)
(3)实际uboot从SD卡启动时是这样的:iROM先执行,根据OMpin判断出启动设备是SD卡,然后从S卡的block1开始读取16KB(8KB)到SRAM中执行BL1,BL1执行时负责初始化DDR,并且从SD卡的49扇区开始复制整个uboot到DDR中指定位置(0x23E00000)去备用;然后BL1继续执行直到ldr pc, =main时BL1跳转到DDR上的BL2中接着执行uboot的第二阶段。

总结:uboot中的这种启动方式比上节讲的分散加载的好处在于:能够兼容各种启动方式。

1.10.8.解决X210开发板的软开关按键问题
1.10.8.1、X210开发板的软启动电路详解
(1)210供电需要的电压比较稳定,而外部适配器的输出电压不一定那么稳定,因此板载了一个文稳压器件MP1482.这个稳压芯片的作用就是外部适配器电压在一定范围内变化时稳压芯片的输出电压都是5V。
(2)MP1482芯片有一个EN(Enable)引脚,这个引脚可以让稳压芯片输出或关闭输出。EN为高电平时有输出电压,EN引脚为低电平时稳压芯片无输出。
(3)两个因素可以影响EN引脚的电平:第一个是POWER按键(SW1),POWER按键按下时EN为高电平,POWER按键弹起时EN为低电平;第二个是POWER_LOCK(EINT0)引脚,这个引脚为POWER_LOCK模式下高电平,则EN为高;若这个引脚为EINT0模式或者为POWER_LOCK模式但输出为低电平,则EN为低。
(4)图中还有EINT1引脚,这个引脚的作用是用来做中断,提供给CPU用来唤醒的。

1.10.8.2、为什么要软启动
(1)一般的电路设计都是用拨码开关来做电源开关的(打到一侧则接通,打到另一侧则关闭)。这种方式的优点是设计简单,缺点是电路太简单,整个主板要么有电要么没电无法做休眠模式、低功耗模式等。
(2)软启动电路是比较接近于实际产品的,其他开发板的硬开关其实是简化版的,和实际产品还有差异。

1.10.8.3、开发板供电置锁原理和分析
(1)软开关在设计时有一个置锁电路,用EINT0(也就是GPH0_2)引脚来控制的。
(2)EINT0这个引脚是有复用设计(两个完全不相干的功能挤在同一个引脚上,同时我们只能让这个引脚用于其中一种功能,这就叫复用)的,一个是GPIO(也就是GPH0_2引脚)、一个是PS_HOLD_CONTROL。(注意:EINT0功能算是GPIO下的一个子功能)
(3)PS_HOLD在Section2.4 Power Management章节下的4.10.5.8节下。
(4)PS_HOLD_CONTROL寄存器(0xE010E81C),共有3个位有用。
bit0, 0表示这个引脚为GPIO功能,1表示这个引脚为PS_HOLD功能
bit9,0表示这个引脚方向为输入,1表示这个引脚方向为输出
bit8,0表示这个引脚输出为低电平,1表示输出为高电平。
分析:我们要使用软启动置锁,则需要将bit0、8、9都置为1即可。

1.10.8.4、写代码+实验验证
(1)要想让开发板和普通的开发板一样,一按下按键程序运行后即可松手不会断电,则只要在程序的开头部分添加代码去置锁开关板即可。
(2)置锁代码的方法是:给PS_HOLD_CONTROL寄存器的bit0、8、9均写入1即可。
(3)注意:此时开发板已经置锁,POWER按键已经失效,关机时需要按下复位按键。

你可能感兴趣的:(笔记,arm,c语言,开发语言,后端)