嵌入式必备知识.docx
- 文档编号:10001847
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:112
- 大小:645.23KB
嵌入式必备知识.docx
《嵌入式必备知识.docx》由会员分享,可在线阅读,更多相关《嵌入式必备知识.docx(112页珍藏版)》请在冰豆网上搜索。
嵌入式必备知识
嵌入式系统开发必备知识
学习嵌入式需要的条件:
编程能力(C语言)
内核框架的知识
字符设备
input子系统
总线设备驱动模型
platform
I2C
网卡驱动的框架
framebuffer
硬件的知识
设备和CPU的连接方式
1)GPIO
2)地址总线数据总线
3)协议类总线
中断号
硬件的芯片手册
CPU手册
1嵌入式系统:
1)uCos-II
–uC/OS-II是一种基于优先级的可抢先的硬实时内核。
应用广泛,专门为嵌入式设备设计,支持多种CPU,可运行在8位到64位的各种系统上。
–.51版本之后,就通过了美国FAA认证,可以运行在诸如航天器等对安全要求极为苛刻的系统之上(可用在生命攸关项目中)。
–商用要支付版权费,可以得到源代码。
2)Vxworks
–vxworks是这几种实时系统中性能最好的一个也是比较贵的,主要用于商业领域和科研领域。
飞到火星去的探测器上安装的就是这个系统。
实时性好。
3)Nuclues
–实时性比较好。
对文件系统,网络协议栈的支持也比较不错,带的图形显示。
nuclues内核很小。
4)Threadx
–ThreadX是优秀的硬实时操作系统,具有规模小、实时性强、可靠性高、易于使用等特点。
–并且支持大量的处理器和SoC,包括ARM、PowerPC、SH4、MIPS、ADIDSP、TIDPS、NiosII等,广泛应用于消费电子、汽车电子、工业自动化、网络解决方案、军事与航空航天等领域中
–2005年7月4日,美国宇航局成功实施“深度撞击”号宇宙飞船对坦普尔1号彗星的准确撞击,此事件成为全球关注的焦点。
其中,“深度撞击”号宇宙飞船中关键的任务由著名的hreadX实时操作系统完成。
–2005年8月12日,美国宇航局发射的火星探测器MRO,其关键任务仍由ThreadX实时操作系统担当。
5)freertos
–FreeRTOS免费的开源实时操作系统,短小精悍。
6)eCos
–ECOS由RedHat推出的小型实时系统(RealTimeOperatingSystem),最低编译核心可小至10K的级别,采用C++编写。
–此系统和嵌入式Linux系统的差异是他将操作系统做成静态连接的方式。
7)RT-Thread
–来自中国的开源实时操作系统,是一款高效、稳定的实时操作系统内核,支持的特性包括:
全抢占的实时多任务内核、小巧而与底层具体实现无关的文件系统、轻型的TCP/IP协议栈、命令即C语言的shell命令行、轻型的多窗口。
–目前在国内已经有十多家企业在使用,从数据采集、数据监控到机械控
制,证明其是一款稳定并可用于产品的嵌入式实时系统。
8)Nut/OS
–NUT/OS是一个RTOS,开源免费,支持标准C库,支持网络
9)QNX
–采用微内核架构的类Unix实时操作系统,遵从POSIX规范,主要用于嵌入式领域,是业界公认的X86平台上最好的嵌入式实时系统之一,其应用极广,包含车载音乐和媒体功
能、核电站和美国陆军无人驾驶Crusher坦克的控制系统,RIM公司的BlackBerry
PlayBook平板电脑等。
10)Win8
–在嵌入系统上占有重要地位,主要用于PDA,实时性比较差。
支持多线程,支持j2me
,支持.netframworkmobile。
和winxp等系统同宗,开发使用EVC、VS,容易被开发者接受。
后续有Windowsmobile6、WindowsPhone7等版本推出。
11)Rtems
–实时多处理器系统(RealTimeExecutiveforMultiprocessorSystems),最早用于美国国防系统,早期的名称为实时导弹系统(RealTimeExecutiveforMissileSystems),目前无论是航空航天、军工,还是民用领域都有着极为广泛的应用。
12)Nuttx
–一个年轻的RTOS系统,采用微内核架构,支持POSIX标准,目标标准化嵌入式系统。
扩展性强,适用于8位到32位系统。
2nandflash与norflash
价格
cpu连接方式
程序执行
写入nor以字节为单位nand以页为单位
擦除nand快,擦一个块nor只需要擦一个字节
位交换
坏块NAND器件需要对介质进行初始化扫描以发现坏块,并将坏块标记为不可用。
在已制成的器件中在使用NAND器件时,必须先写入驱动程序,才能继续执行其他操作。
向NAND器件写入信息需要相当的技巧,因为设计师绝不能向坏块写入,这就意味着在NAND器件上自始至终都必须进行虚拟映射。
NOR闪存是随机存储介质,用于数据量较小的场合;NAND闪存是连续存储介质,适合存放大的数据
Nandflash型号:
K9K8G08U0B(以K9G或K9L为开头型号的三星闪存则是MLC,以HYUU或HYUV为开头型号的现代闪存应是MLC)
1)使用前必须格式化(必须有文件系统)
NORFLASH:
一般几十M,和指针一样可以直接使用,最大不超过4G,可以直接访问,一一对应,接口和内存一样,读写和内存一样.
NANDFLASH:
不能随机访问,因为不是一一对应的,内存可以直接访问,所以nandflash中的数据先放到内存中,然后才送到处理器只有8根数据线,没有地址线
Nandflash的读写的基本单位是页page(512,2k,4k)若干个页可以拼成一个块(block)(64page),擦除的基本单位是块,当写入一个页时,要先把这个页所在的块中的内容复制的缓冲区,把要写入的页修改,然后把这个块擦除,最后回写到块中;当写入一个块的多个页时,要先把块内容复制到缓冲区,然后修改各个页的内容,然后擦除这个块,最后回写这个块。
Nandflashpage有2k的空间,还有64B的校验区
如果以字节为单位,那么最大是4G,以页为单位,一页是2k,那么最大是2k*4G
一个块有64个页
2)管脚功能:
ALE:
被拉高传入的是地址
CLE:
被拉高传入的是命令
nCE:
片选使能,用的时候置高电平,不用的时候置低电平
nRE:
读使能
nWR:
写使能
读写一个为高,另外一个一定为低
R/nB:
ready/busyoutput高电平空闲低电平忙等待
3)软件编程:
1传命令通过8根数据线
2传地址
页内部地址:
A0~A1116-12=40
页偏移地址:
A12~A3019+550
0x8002k
3存数据
Risingedge上升沿
Fallingedge下降沿
Register:
Configuration0xb0e00000fff2MLCnandflash多层SLCnandflash单层
Tacls(命令或者地址锁存)建立时间
Twrph0写使能的运行时间
Twrph1结束时间
Control0xb0e000041
Commandb0e00008
Addressb0e0000c
Dateb0e00010
NandFlash也有几种,根据技术方式,分为SLC、MCL、MirrorBit等三种。
SLC是Singlelevelcell的缩写,意为每个存储单元中只有1bit数据。
而MLC就是Multi-Level-Cell,意为该技术允许2bit的数据存储在一个存储单元当中。
将两个单位的信息存入一个FloatingGate(闪存存储单元中存放电荷的部分),然后利用不同电位(Level)的电荷,通过内存储存的电压控制精准读写。
MLC通过使用大量的电压等级,每一个单元储存两位数据,数据密度比较大。
SLC架构是0和1两个值,而MLC架构可以一次储存4个以上的值,因此,MLC架构可以有比较好的储存密度.而MirrorBit则是每个存储单元中只有4bit数据。
SLC的技术存储比较稳定,SLC的技术也最为成熟。
然而MLC可以在一个单元中有2bit数据,这样同样大小的晶圆就可以存放更多的数据,也就是成本相同的情况下,容量可以做的更大,这也是同样容量,MLC价格比SLC低很多的原因。
读写速度:
SLC的非常快,MLC的采用先进工艺生产MLC闪存方面困难重重。
随着闪存技术的演进,在浮动栅(floatinggate)中存储的电荷总量减少了,使得检测存储的信息变得更加困难,尤其是对MLC芯片而言,它需要识别四个电压值,而非两个。
4)NANDFLASH和NORFLASH的区别
Intel于1988年首先开发出NORflash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面。
紧接着,1989年,东芝公司发表了NANDflash结构,强调降低每比特的成本,更高的性能,并且象磁盘一样可以通过接口轻松升级。
NOR的特点是芯片内执行(XIP,eXecuteInPlace),这样应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中。
NOR的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。
NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。
应用NAND的困难在于flash的管理和需要特殊的系统接口。
任何flash器件的写入操作只能在空或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除。
NAND器件执行擦除操作是十分简单的,而NOR则要求在进行擦除前先要将目标块内所有的位都写为0。
NOR的读速度比NAND稍快一些。
NAND的写入速度比NOR快很多。
NAND的4ms擦除速度远比NOR的5s快。
大多数写入操作需要先进行擦除操作。
NAND的擦除单元更小,相应的擦除电路更少。
接口差别
NORflash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节。
NAND器件使用复杂的I/O口来串行地存取数据,各个产品或厂商的方法可能各不相同。
8个引脚用来传送控制、地址和数据信息。
NAND读和写操作采用512字节的块,这一点有点像硬盘管理此类操作,很自然地,基于NAND的存储器就可以取代硬盘或其他块设备。
位交换
所有flash器件都受位交换现象的困扰。
在某些情况下(很少见,NAND发生的次数要比NOR多),一个比特位会发生反转或被报告反转了。
一位的变化可能不很明显,但是如果发生在一个关键文件上,这个小小的故障可能导致系统停机。
如果只是报告有问题,多读几次就可能解决了。
当然,如果这个位真的改变了,就必须采用错误探测/错误更正(EDC/ECC)算法。
位反转的问题更多见于NAND闪存,NAND的供应商建议使用NAND闪存的时候,同时使用EDC/ECC算法。
这个问题对于用NAND存储多媒体信息时倒不是致命的。
当然,如果用本地存储设备来存储操作系统、配置文件或其他敏感信息时,必须使用EDC/ECC系统以确保可靠性。
坏块处理
NAND器件中的坏块是随机分布的。
以前也曾有过消除坏块的努力,但发现成品率太低,代价太高,根本不划算。
NAND器件需要对介质进行初始化扫描以发现坏块,并将坏块标记为不可用。
在已制成的器件中,如果通过可靠的方法不能进行这项处理,将导致高故障率。
易于使用
可以非常直接地使用基于NOR的闪存,可以像其他存储器那样连接,并可以在上面直接运行代码。
由于需要I/O接口,NAND要复杂得多。
各种NAND器件的存取方法因厂家而异。
在使用NAND器件时,必须先写入驱动程序,才能继续执行其他操作。
向NAND器件写入信息需要相当的技巧,因为设计师绝不能向坏块写入,这就意味着在NAND器件上自始至终都必须进行虚拟映射。
<1>应用程序对NOR芯片操作以“字”为基本单位。
为了方便对大容量NOR闪存的管理,通常将NOR闪存分成大小为128KB或者64KB的逻辑块,有时候块内还分成扇区。
读写时需要同时指定逻辑块号和块内偏移。
应用程序对NAND芯片操作是以“块”为基本单位。
NAND闪存的块比较小,一般是8KB,然后每块又分成页,页的大小一般是512字节。
要修改NAND芯片中一个字节,必须重写整个数据块。
<2>NOR闪存是随机存储介质,用于数据量较小的场合;NAND闪存是连续存储介质,适合存放大的数据。
<3>由于NOR地址线和数据线分开,所以NOR芯片可以像SRAM一样连在数据线上。
NOR芯片的使用也类似于通常的内存芯片,它的传输效率很高,可执行程序可以在芯片内执行(XIP,eXecuteInPlace),这样应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中。
由于NOR的这个特点,嵌入式系统中经常将NOR芯片做启动芯片使用。
而NAND共用地址和数据总线,需要额外联结一些控制的输入输出,所以直接将NAND芯片做启动芯片比较难.
<4>NAND闪存芯片因为共用地址和数据总线的原因,不允许对一个字节甚至一个块进行的数据清空,只能对一个固定大小的区域进行清零操作;而NOR芯片可以对字进行操作。
所以在处理小数据量的I/O操作的时候的速度要快于NAND的速度。
比如一块NOR芯片通常写一个字需要10微秒,那么在32位总线上写512字节需要1280毫秒;而NAND闪存写512字节需要的时间包括:
512×每字节50纳秒+10微秒的寻页时间+200微秒的片擦写时间=234微秒。
<5>NAND闪存的容量比较大,目前最大容量己经达到8G字节。
为了方便管理,NAND的存储空间使用了块和页两级存储体系,也就是说闪存的存储空间是二维的,比如K9F5608UOA闪存块的大小为16K,每页的大小是512字节,每页还16字节空闲区用来存放错误校验码空间(有时也称为out-of-band,OOB空间);在进行写操作的时候NAND闪存每次将一个字节的数据放入内部的缓存区,然后再发出“写指令”进行写操作。
由于对NAND闪存的操作都是以块和页为单位的,所以在向NAND闪存进行大量数据的读写时,NAND的速度要快于NOR闪存。
<6>NOR闪存的可靠性要高于NAND闪存,这主要是因为NOR型闪存的接口简单,数据操作少,位交换操作少,因此可靠性高,极少出现坏区块,因而一般用在对可靠性要求高的地方。
相反的,NAND型闪存接口和操作均相对复杂,位交换操作也很多,关键性数据更是需安错误探测/错误更正〔EDC/ECC)算法来确保数据的完整性,因此出现问题的几率要大得多,坏区块也是不可避免的,而且由于坏区块是随机分布的,连纠错也无法做到
<7>NANDFlash一般地址线和数据线共用,对读写速度有一定影响;而NORFlash闪存数据线和地址线分开,所以相对而言读写速度快一些。
<8>从使用角度来看,NOR闪存与NAND闪存是各有特点的:
(1)NOR的存储密度低,所以存储一个字节的成本也较高,而NAND闪存的存储密度和存储容量均比较高;
(2)NAND型闪存在擦、写文件(特别是连续的大文件)时速度非常快,非常适用于顺序读取的场合,而NOR的读取速度很快,在随机存取的应用中有良好的表现。
5)NANDFLASH和NORFLASH的共性:
<1>NAND和NOR芯片的共性首先表现在向芯片中写数据必须先将芯片中对应的内容清空,然后再写入,也就是通常说的“先擦后写”。
只不过NOR芯片只用擦写一个字,而NAND需要擦写整个块。
其次,闪存擦写的次数都是有限的.当闪存的使用接近使用寿命的时候,经常会出现写操作失败;到达使用寿命时,闪存内部存放的数据虽然可以读,但是不能再进行写操作了所以为了防止上面问题的发生,不能对某个特定的区域反复进行写操作。
通常NAND的可擦写次数高于NOR芯片,但是由于NAND通常是整块擦写,块内的页面中如果有一位失效整个块就会失效,而且由于擦写过程复杂,失败的概率相对较高,所以从整体上来说NOR的寿命较长。
<2>另一个共性是闪存的读写操作不仅仅是一个物理操作,实际上在闪存上存放数据必须使用算法实现,这个模块一般在驱动程序的MTD'(MemoryTechnologyDrivers)模块中或者在FTLZ(FlashTranslationLayer)层内实现,具体算法和芯片的生产厂商以及芯片型号有关系。
6)使用选择
一般的原则是:
在大容量的多媒体应用中选用NAND型闪存,而在数据/程序存贮应用中选用NOR型闪存。
根据这一原则,设计人员也可以把两种闪存芯片结合起来使用,用NOR芯片存储程序,用NAND芯片存储数据,使两种闪存的优势互补。
事实上,这种聪明的设计早已普遍应用于手机、PocketPC、PDA及电子词典等设备中了。
NAND在使用中还存在着坏块管理的问题,在NAND闪存中,由于坏块是随机分布的,因此需要进行扫描并将坏块打上标记,就像对付硬盘中的坏扇区一样。
目前的产品中,可最多允许出现80个坏块。
坏块的存在使得向NAND闪存写入信息需要相当的技巧,因为设计师绝不能向坏块写入,这就意味着在NAND闪存上自始至终都必须进行虚拟映射。
在NOR闪存上运行代码不需要任何的软件支持,在NAND闪存上进行同样操作时,通常需要驱动程序,也就是内存技术驱动程序(MTD),NAND和NOR闪存在进行写入和擦除操作时都需要MTD
3RAM、ROM、SRAM、DRAM、DDR
RAM(Randomaccessmemsory):
随机存取存储器(DRAM,SRAM)
DRAM(DynamicRandomaccessmemsory)动态随机存取存储器,内存里面的数据需要动态的刷新,现在的主流内存设备,节省成本,访问速度略低(SDRAM,DDRAM)
SRAM(staticrandomaccessmemsory)静态随机存储器,存储器阵列,不需要刷新就保持存在,一开机直接就能用,不需要编写程序,成本高,速度快,一般只有几百k,最多几兆一般在处理器内部都会内置一小块SRAM,大约几十k
4i2c协议(见图i2c)
I2C(Inter-IntegratedCircuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。
从硬件上来说,只有两条线,十分简单,所以很多设备都使用这种协议。
通过控制两条线的时序来传递数据。
总线上可以挂接很多设备,那么主设备怎么找到对应的从设备呢?
每一个从设备都有一个自己的地址,访问时遵守i2c总线协议,以eeprom为例:
高4位固定,三位A0,A1,A2(由设备在板子上的连接确定的。
),最后一个读写位这个地址由从设备和开发板连线决定的。
1k/2KA0,A1,A2板子上的连线决定
4KA2,A1,P0
8KA2,P1,P2
16KP2,P1,P0分页访问
因为s5pv210处理器集成了i2c的控制器,所以我们只需要给几个寄存器赋值就可以使用了,但是有的cpu没有集成i2c控制器,那么怎么办?
1外接一个控制器
2用两个gpio模拟时序输出,根据图可以看出在scl为低时改变sda的值。
这样才有效,发送1要在scl为低电平的时候进行。
I2C总线最主要的优点是其简单性和有效性。
由于接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。
i2c(IIC)通信协议
定义:
I2C两线式串行总线
SCL:
时钟线
SDA:
数据线
使用到的信号:
开始信号:
start,当SCL处于高电平,SDA产生一个下降沿
结束信号:
stop,当SCL处于高电平,SDA产生一个上升沿
应答信号:
ACK,当SCL处于高电平,SDA为低电平状态
数据0/1(见图i2c——data):
SDA低/高,如果发送1,SDA要在SCL低电平的时候跳变成高,然后在SCL高电平的时候保持高电平就是1;如果发送0,SDA要在SCL低电平的时候跳变成低电平,然后在SCL高电平的时候保持为0,前8个周期发送8个bit,由cpu发送,第9个周期cpu把I2C线让出来,这时设备向cpu发送一个ACK信号,表示已经收到了。
如果没有发送ACK信号,即第9周期时SDA为高电平,那么主设备知道发送的信号没有收到。
i2c通信的特点:
i2c通信过程中,设备之间有主从之分。
i2c通信的发起者是主设备,总线上只有一个主设备,可以有很多从设备
i2c总线上的每个从设备都有一个固定的地址
用i2c协议与EEPROM通信:
写过程:
产生一个start
从设备地址+W
等待ACK
发送即将写入从设备内的偏移地址
等待ACK
发送即将写入从设备内的数据
等待ACK
产生停止信号
这个过程在用户态可能会产生回写因为是8bit写,写完8bit后,回写了,例如写7:
18:
29:
310:
4,但是在从设备中7和8bit写上了,但是9和10bit没有写上,而是写入了1和2bit。
读过程:
START
从设备地址+W//看后面的数据是要从从设备读还是写信号,这里将读哪里的内容的地址写到从设备中
等ACK
发送要读的从设备内的偏移地址
等待ACK
START
从设备地址+R
等待ACK
CPU接收SDA上的数据(8bits)
CPU如果想让从设备继续发送下一个字节数据,则CPU发送ACK
否则CPU不发送ACK,在第十个周期CPU发送停止信号
i2c总线上的设备,cpu读取或者写的时候数据不对,是因为总线上写的速度跟不上应用层cpu的发送速度,导致数据丢失。
这是驱动的问题,不是应用的问题,可以在应用上加延时解决
如eepromself-timedwritecycle(5msmax)说明写操作的时间间隔为5ms
5uart
模式有两种:
一种轮询,一种中断模式
6Clear清零Set置1
7LCD显示
在LCD显示屏上的像素点与显存是一一对应的,显存是在内存中划出一块区域,可对其进行读、写、映射等操作,需要申请。
要在LCD上显示一条线,只要在显存与其对应的位置放上一条线就可以了。
ARM核中的LCD控制器会周期性的到显存中读数据,然后将读到的数据按照一定的时序发送给LCD驱动器,LCD驱动器就会驱动LCD把图像显示出来。
1)LCD驱动开发的主要工作:
1>申请显存
2>配置LCD控制器,让LCD控制器周期性的读取显存中的数据,主要工作是配置三个时间,即HSYNC、VSYNC、VCLK,不然会使读取到的数据丢失
3>按照一定的时序,将读取到的数据发送给LCD驱动器(不同厂家的LCD性能不一样,支持的时序不同,ARM通过配置时序可以支持多种LCD)
4>mmap(内核中已经写好了)
集成显卡没有显存,从内存中划出一块区域作为显存,独立显卡有自己的显存,所以计算以及处理能力比较快。
Frambuffer:
导出LCD物理缓存(显存)到用户空间(0~3G)用户空间要显示一幅图像到LCD屏,首先open设备文件,然后write,将要显示的内容复制到
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 必备 知识
![提示](https://static.bdocx.com/images/bang_tan.gif)