ARM&硬件
1.硬件
1.ROM(Read Only Memory)
只读存储器。导体存储器,ROM在系统停止供电的时候仍然可以保持数据。即掉电保持。
1.PROM(programme)
可编程的ROM,PROM是一次性的,也就是软件灌入后,就无法修改了,这种是早期的产品,现在已经不可能使用了。
2.EPROM(erasure programme)
可擦除可编程ROM,而EPROM是通过紫外光的照射擦出原先的程序,是一种通用的存储器。
3.EEPROM(electricity erasure programme )
可擦除可编程ROM,是通过电子擦出,价格很高,写入时间很长,写入很慢。
2.RAM(Random Access Memory)
随机存取存储器,也叫主存,是与CPU直接交换数据的内部存储器。而RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。即掉电丢失。
1.静态RAM(Static RAM/SRAM)
SRAM速度非常快,是目前读写最快的存储设备了,但是它也非常昂贵,所以只在要求很苛刻的地方使用,譬如CPU的一级缓冲,二级缓冲。
2.动态RAM(Dynamic RAM/DRAM)
DRAM保留数据的时间很短,速度也比SRAM慢,不过它还是比任何的ROM都要快,但从价格上来说DRAM相比SRAM要便宜很多,计算机内存就是DRAM的。
3.DDR(Date-Rate RAM)
双倍速率随机存储器也称作DDR 、SDRAM,这种改进型的RAM和SDRAM是基本一样的,不同之处在于它可以在一个时钟读写两次数据,这样就使得数据传输速度加倍了。这是目前电脑中用得最多的内存。
3.FLASH
FLASH存储器又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速读取数据(NVRAM的优势),U盘和MP3里用的就是这种存储器。在过去的20年里,嵌入式系统一直使用ROM(EPROM)作为它们的存储设备,然而近年来Flash全面代替了ROM(EPROM)在嵌入式系统中的地位,它用作存储Bootloader以及操作系统或者程序代码,或者直接当硬盘使用(U盘)。
1.NOR Flash(或非)
- 接口理解
NOR(或非)----地址、数据总线分开 - 读写单位:
NOR(或非)----字节 - 组成结构:
NOR(或非)----扇区、字节 - 擦除单位:
NOR(或非)----块;(磁盘)
NOR Flash的读取和我们常见的SRAM(静态RAM)的读取是一样,用户可以直接运行装载在NOR FLASH里面的代码,这样可以减少SRAM(静态RAM)的容量从而节约了成本。缺点是需要很长的时间进行抹写,但是它提供完整的寻址与数据总线,并允许访问随机存取存储器上的任何区域。
2.NADN Flash(与非)
- 接口理解
NAND(与非)----地址、数据总线共用。 - 读写单位:
NAND(与非)----页。 - 组成结构:
NAND(与非)----块、页 - 擦除单位:
NAND(与非)----块;
NAND Flash没有采取内存的随机读取技术,它的读取是以一次读取一块的形式来进行的,通常是一次读取512个字节,采用这种技术的Flash比较廉价。用户不能直接运行NAND Flash上的代码,因此好多使用NAND Flash的开发板除了使用NAND Flah以外,还加上了一块小的NOR Flash来运行启动代码。
要在NandFlash上面读写数据,要外部加主控和电路设计。NAND Flash具有较快的抹写时间, 而且每个存储单元的面积也较小,这让NAND Flash相较于NOR Flash具有较高的存储密度与较低的每比特成本(成本低)。同时它的可抹除次数也高出NOR Flash十倍。然而NAND Flash 的I/O接口并没有随机存取外部地址总线,它必须以区块性的方式进行读取,NAND Flash典型的区块大小是数百至数千比特。
NAND和NOR芯片的共性首先表现在向芯片中写数据必须先将芯片中对应的内容清空,然后再写入,也就是通常说的“先擦后写”。只不过NOR芯片只用擦写一个字,而NAND需要擦写整个块。
3.EMMC
EMMC 相当于 NandFlash+主控IC ,对外的接口协议与SD、TF卡一样,主要是针对手机或平板电脑等产品的内嵌式存储器标准规格。EMMC的一个明显优势是在封装中集成了一个控制器,它提供标准接口并管理闪存,使得手机厂商就能专注于产品开发的其它部分,并缩短向市场推出产品的时间。这些特点对于希望通过缩小光刻尺寸和降低成本的NAND供应商来说,同样的重要。(***版)。
2.ARM
1.CPU,MPU,MCU,SOC联系与差别
l.CPU(Central Processing Unit)
是一台计算机的运算核心和控制核心。CPU由运算器、控制器和寄存器及实现它们之间联系的数据、控制及状态的总线构成。差不多所有的CPU的运作原理可分为四个阶段:提取(Fetch)、解码(Decode)、执行(Execute)和写回(Writeback)。CPU从存储器或高速缓冲存储器中取出指令,放入指令寄存器,并对指令译码,并执行指令。所谓的计算机的可编程性主要是指对CPU的编程。
2.MPU(Micro Processor Unit)--嵌入式微处理器
微处理器(不是微控制器),通常代表一个功能强大的CPU(暂且理解为增强版的CPU吧),但不是为任何已有的特定计算目的而设计的芯片。
3.MCU(Micro Control Unit)--嵌入式微控制器--单片机
微控制器,是指随着大规模集成电路的出现及其发展,将计算机的CPU、RAM、ROM、定时计数器和多种I/O接口集成在一片芯片上,形成芯片级的芯片,比如51这些芯片,内部除了CPU外还有RAM,ROM,可以直接加简单的外围器件(电阻,电容)就可以运行代码了,而MPU如x86,am这些就不能直接放代码了,它只不过是增强版的CPU,所以得添加RAM,ROM。MCU MPU最主要的区别就是能否直接运行代码。MCU有内部的RAM ROM,而MPU是增强版的CPU,需要添加外部RAM ROM才可以运行代码。
4.SOC(System on Chip)
指的是片上系统,MCU只是芯片级的芯片,而SOC是系统级的芯片,它既MCU(51)那样有内置RAM,ROM同时又像MPU(arm)那样强大的,不单单是放简单的代码,可以放系统级的代码,也就是说可以运行操作系统(将就认为是MCU集成化与MPU强处理力各优点合)。
2.交叉编译
1.什么是交叉编译
在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代
码。
这里需要注意的是所谓平台,实际上包含两个概念:体系结构、操作系统。同一个体系结构可以运行不同的操作系统。
2.为什么需要交叉编译
有时是因为目的平台上不允许或不能够多安装我们所需要的编译器,而我们又需要这个编译器的某些特征;有时是因为目的平台上的资源贫乏,无法运行我们所需要编译器;有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。
3.CPU的两种体系结构--哈佛结构和冯诺依曼结构
1.冯诺依曼结构
采用指令和数据统一编址,使用同一条总线传输,CPU读取指令和数据的操作无法重叠。冯诺依曼结构主要用于通用计算机领域,需要对存储器中的代码和数据频繁的进行修改,统一编址有利于节约资源。
2.哈佛结构
哈佛结构采用指令和数据独立编址,使用两条独立的总线传输,CPU读取指令和数据的操作可以重叠。主要用于嵌入式计算机,程序固化在硬件中,有较高的可靠性、运算速度和较大的吞吐。哈佛结构在指令执行时,取指和取数可以并行,因此具有更高的执行效率。
4.ARM流水线技术
流水线技术通过多个功能部件并行工作来缩短程序执行时间,提高处理器核的效率和吞吐率,从而成为微处理器设计中最为重要的技术之一。通过增加流水线级数简化了流水线各级的逻辑,进一步提高了处理器的性能。
PC代表程序计数器,流水线使用三个阶段,因此指令分为三个阶段执行:
1.取指(从存储器装载一条指令)
2.译码(识别将要被执行的指令)
3.执行(处理指令并将结果写回寄存器)
4.访存(是指存储器访问指令将数据从存储器中读出,或者写入存储器的过程。)
5.写回(指令执行的结果写回通用寄存器组的过程)
而R15(PC)总是指向正在取指的指令,而不是指向正在执行的指令或正在译码的指令。一般来说,人们习惯性定将正在执行的指令作为参考点,称之为当前第一条指令,因此PC总是指向第三条指令。当ARM状态时,每条指令为4字节长,所以PC始终指向该指令地址加8字节的地址,即:PC值=当前程序执行位置+8
ARM指令是三级流水线,取指,泽指,执行,同时执行的,现在PC指向的是正在取指的地址(下一条指令),那么cpu正在译指的指令地址是PC-4(假设在ARM状态下,一个指令占4个字节),cpu正在执行的指令地址是PC-8,也就是说PC所指向的地址和现在所执行的指令地址相差8。当突然发生中断的时候,保存的是PC的地址(PC-8+4=PC-4下一条指令的地址)
5.ARM工作模式
1.用户模式(USR)
用户模式是用户程序的工作模式,它运行在操作系统的用户态,它没有权限去操作其它硬件资源,只能执行处理自己的数据,也不能切换到其它模式下,要想访问硬件资源或切换到其它模式只能通过软中断或产生异常。
2.系统模式(SYS)
系统模式是特权模式,不受用户模式的限制。用户模式和系统模式共用一套寄存器,操作系统在该模式下可以方便的访问用户模式的寄存器,而且操作系统的一些特权任务可以使用这个模式访问一些受控的资源。
说明:用户模式与系统模式两者使用相同的寄存器,都没有SPSR(Saved Program Statement Register,已保存程序状态寄存器),但系统模式比用户模式有更高的权限,可以访问所有系统资源。
3.一般中断模式(IRQ)
一般中断模式也叫普通中断模式,用于处理一般的中断请求,通常在硬件产生中断信号之后自动进入该模式,该模式为特权模式,可以自由访问系统硬件资源。
4.快速中断模式(FIQ)
快速中断模式是相对一般中断模式而言的,它是用来处理对时间要求比较紧急的中断请求,主要用于高速数据传输及通道处理中。快中断有许多(R8~R14)自己的专用寄存器,发生中断时,使用自己的寄存器就避免了保存和恢复某些寄存器。如果异常中断处理程序中使用它自己的物理寄存器之外的其他寄存器,异常中断处理程序必须保存和恢复这些寄存器
5.管理模式(SVC)
管理模式是CPU上电后默认模式,因此,在该模式下主要用来做系统的初始化,软中断处理也在该模式下。当用户模式下的用户程序请求使用硬件资源时,通过软件中断进入该模式。
说明:系统复位或开机、软中断时进入到SVC模式下。
6.终止模式(ABT)
中止模式用于支持虚拟内存或存储器保护,当用户程序访问非法地址,没有权限读取的内存地址时,会进入该模式,linux下编程时经常出现的segment faulti通常都是在该模式下抛出返回的。
7.未定义模式(UND)
未定义模式用于支持硬件协处理器P15的软件仿真,CPU在指令的译码阶段不能识别该指令操作时,会进入未定义模式。
8.总结
- 除了用户模式外,其它6种模式称为特权模式。所谓特权模式,即具有如下权利:
MRS(把状态寄存器的内容放到通用寄存器);
MSR(把通用寄存器的内容放到状态寄存器中)。
由于状态寄存器中的内容不能够改变,因此,要先把内容复制到通用寄存器中,然后修改通用寄存器中的内容,再把通用寄存器中的内容复制给状态寄存器中,即可完成“修改状态寄存器”的任务。
- 剩下的六种模式中除去系统模式外,统称为异常模式。
6.ARM寄存器
在 ARM 处理器中,内核同时支持 32 位的 ARM 指令 和 16 位的 Thumb 指令。THUMB指令是ARM指令的子集可以相互调用,只要遵循一定的调用规则。由于Thumb指令是16位的,所以Thumb指令相较于ARM指令在时间效率和空间效率会更高。
生活解释:
ARM核就好比一个高中学校,那种包含普通高中和职业高中的。普通高中就相当于ARM状态,职业高中就相当于Thumb状态,这样还不能理解的话:可以认为 泡泡卡丁车 中普通模式和加速模式,,卡丁车加速要等到集气管加满,然后“ctrl”一下,就切换到了加速模式,气放完了就又回来了,不管加速模式还是普通模式都是在跑,只是速度不一样而已。
34 个通用寄存器,这些寄存器都是 32 位的。包括 R15 程序计数器(PC),堆栈指针—R13/sp,子程序连接寄存器—R14/lr。
8 个状态寄存器,包括 CPSR 和 SPSR。
1.通用寄存器
ARM 架构提供了 16 个 32 位的通用寄存器(R0R15)供软件使用,前 15 个(R0R14)可以用作通用的数据存储,R15 是程序计数器 PC,用来保存将要执行的指令。
- 未备份寄存器,即 R0~R7。
在所有运行模式下,未分组寄存器都指向同一个物理寄存器,他们未被系统用作特殊的用途。因此在中断或异常处理进行异常模式转换时,由于不同的处理器运行模式均使用相同的物理寄存器,所以可能造成寄存器中数据的破坏。
- 备份寄存器,即 R8~R14。
- 程序计数器 PC,即 R15。
2.状态寄存器
ARM 还提供了一个当前程序状态寄存器 CPSR 和一个备份程序状态寄存器 SPSR(程序状态保存寄存器)。
CPSR:在任何处理器模式下被访问。它包含了条件标志位、中断禁止位、当前处理器模式标志以及其他的一些控制和状态位。
SPSR:SPSR 寄存器就是 CPSR 寄存器的备份,用于保存CPSR的状态,以便异常返回后恢复异常发生时的工作状态。
7.ARM系统中,在函数调用时候参数的传递
当参数小于等于4的时候是通过0-r3寄存器来进行传递的,当参数大于4的时候是通过压栈的方式进行传递。主要是通过eax、ebx、ecx等寄存器。
8.ARM外部中断
1.中断向量表
中断向量地址 | 异常中断类型 | 异常中断模式 | 优先级(6最低) |
---|---|---|---|
0x0 | 复位 | 特权模式(SVC) | 1 |
0x4 | 未定义中断 | 未定义指令终止模(Undef) | 6 |
0x8 | 软件中断(SWI) | 特权模式(SVC) | 6 |
0x0c | 指令预取中止 | 中止模式 | 5 |
0x10 | 数据访问中止 | 中止模式 | 2 |
0x14 | 保留 | 未使用 | 未使用 |
0x18 | 外部中断请求(IRQ) | 外部中断(IRQ)模式 | 4 |
0x1c | 快速中断请求(FIQ) | 快速中断(FIQ)模式 | 3 |
2.硬中断&软中断
- 硬中断
在处理器中,中断是一个过程。即CPU在正常执行程序的过程中,遇到外部或内部的紧急事件需要处理,暂时中断(中止)当前程序的执行,而转去完成事件服务程序,待事件完毕后,再返回到暂停处(断点)继续执行原来的程序。事件服务程序又称中断处理程序或中断服务程序。严格意义上来说,上面的描述是针对硬件中断而言的。
- 软中断
用软件方法引起的中断,即事先在程序中安排特殊的指令,CPU执行到该类指令的时候,会跳转去执行相应的一段预先安排好的程序,待程序执行完,再返回原来程序处。这种通过软件方法实现的中断叫软中断。
- 软、硬中断和信号的区别
硬中断的出现过程是不可预测的,是随机的;而软中断是预先安排好的指令中断方式。“硬中断是外部设备对CPU的中断”,“软中断通常是硬中断服务程序对内核的中断”,“信号则是由内核(或其他进程)对某个进程的中断”。
3.中断流程
A 函数中调用 B 函数,当 B 函数执行完以后再回到 A 函数继续执行。要想再跳回 A 函数以后代码能够接着正常运行,那就必须在跳到 B 函数之前将当前处理器状态保存起来(就是保存 R0-R15 这些寄存器值),当 B 函数执行完成以后再用前面保存的寄存器值恢复R0-R15 即可。保存 R0-R15 寄存器的操作就叫做现场保护,恢复 R0-R15 寄存器的操作就叫做恢复现场。
- 保存现场
- 保存当前的PC值到R14,寄存器R14常用作链接寄存器(LR,Link Register),当进入子程序时,常用来保存PC(Program Counter,程序计数器) 的返回值。
- 保存当前的程序运行状态到SPSR(Storage Program Status Register,程序状态备份寄存器)。
- 适当设置 CPSR 对应功能位
- 切换处理器进入SVC超级管理员模式。
- 根据需要,禁止中断位。
- 根据异常切换到对应的异常模式
- 模式切换。根据发生的中断类型,进入IRQ模式或FIQ模式。
- 获取中断源。以异常向量表保存在低地址处为例,若是IRQ中断,则PC指针跳到0x18处(0x18:LDR PC, IRQ_ADDR);若是FIQ中断,则跳到0x1C处(0x1c:LDR PC, FIQ_ADDR)。IRQ和FIQ的异常向量地址处一般保存的是中断服务子程序的地址,所以接下来PC指针跳入中断服务子程序处理中断。
- 中断处理。设置PC = 存放跳转到对应的异常向量表的固定首地址。
- 恢复现场
- 当完成中断服务子程序后,将SPSR中保存的程序运行状态恢复到CPSR(Current Program Status Register,当前程序状态寄存器)中,
- R14中保存的被中断程序的地址恢复到PC中
- 回复普通的寄存器,继续执行被中断的程序。
注释:
- CPSR寄存器称为当前程序状态寄存器,又称 R16,在所有处理器模式下 CPSR都是同一个物理寄存器,保存了程序运行的当前状态。包括各种条件标志、中断禁止 /允许位、处理器模式位以及其它状态和控制信息。
- 在每种异常模式下都有一个对应的物理寄存器——程序状态保存寄存器 SPSR,当异常出现时,SPSR用于保存 CPSR的状态,以便异常返回后恢复异常发生时的工作状态。
9.ARM基本汇编指令
注意:
- ARM 中的指令、伪指令、伪操作、寄存器名等可以全部使用大写,也可以全部使用小写,但是不能大小写混用。
1.数据处理指令
- 【MOV指令--CPU内部使用】:它的传送指令只能是把一个寄存器的值(要能用立即数表示)赋给另一个寄存器,或者将一个常量赋给寄存器,将后边的量赋给前边的量。
MOV R1,R0
:将寄存器R0的值传送到寄存器R1
MOV R0, #0X12
:将立即数 0X12 传递给 R0 寄存器,即 R0=0X12
- 【加法指令】:ADD
ADD R0,R1,R2 ; R0 = R1 + R2
- 【减法指令】:SUB
SUB R0,R1,R2 ; R0 = R1 - R2
- 【逻辑与指令】:AND
AND R0,R0,#3
; 该指令保持R0的0、1位,其余位清零。
- 【逻辑或指令】:ORR
ORR R0,R0,#3
;该指令设置R0的0、1位,其余位保持不变。
- 【逻辑异或指令】:EOR
EOR R0,R0,#3
; 该指令反转R0的0、1位,其余位保持不变。
2.转移指令
方法一:直接使用跳转指令。
- 【B指令--不可返回】
B Label
;程序无条件跳转到标号Label处执行
- 【BL指令--可返回】
BL Label
;当程序无条件跳转到标号Label处执行时,同时将当前的PC值保存到R14中。跳转到标号地址,并将返回地址保存在 LR 中。
- 【BX指令】
BX
指令从ARM指令集跳转到指令中所指定的目标地址,并将处理器的工作状态有ARM状态切换到Thumb状态,该指令同时将PC的当前内容保存到寄存器R14中。
方法二:直接向PC寄存器中写入数据。
3.程序状态寄存器访问指令
- 【MRS指令--CPU内部使用】
MRS R0,CPSR
;传送CPSR的内容到R0,将特殊寄存器(如 CPSR 和 SPSR)中的数据传递给通用寄存器,要读取特殊寄存器的数据只能使用 MRS 指令。
- 【MSR指令--CPU内部使用】
MSR CPSR,R0
;传送R0的内容到CPSR
4.加载/存储指令
- 【LDR指令--外部RAM使用】--读取寄存器
LDR R0,[R1]
:将存储器地址为R1的字数据读入寄存器R0。
LDR Rd, [Rn , #offset]
:从存储器(RAM) Rn+offset 的位置读取数据存放到 Rd 中。
在嵌入式开发中,LDR 最常用的就是读取 CPU 的寄存器值,比如 I.MX6UL 有个寄存器 GPIO1_GDIR,其地址为 0X0209C004。LDR 加载 立即数的时候要使用“=”,而不是“#”。
LDR R0, =0X0209C004
@将寄存器地址 0X0209C004 加载到 R0 中,即 R0=0X0209C004
LDR R1, [R0]
@读取地址 0X0209C004 中的数据到R1 寄存器中
总结:
1:b是位置无关的,ldr不是位置无关的。
32位的B指令的[23,0]bits存放的是要跳转的相对地址。
使用方法:将指令中的24位带符号的补码立即数扩展为32位,然后将这个32位数左移两位,将得到的值加到PC寄存器中,即得到跳转的目标地址。
由于指令所在地址必须是4字节对齐的,因此跳转的地址最低bits必然是0,因此BL指令[23,0]bits保存的是省略这最低2bts的地址,如果补全了这2bits,BL指令就可以表示26bits的跳转地址。在这26bits中需要使用1bit表示向前跳还是向后跳,那么剩下的25bits就可以表示32 MBts的范围了,225=32M因此,B(BL)指令的跳转范围为-32MBytes~+32MBytes。
2:b的范围只能是+-32MB,而ldr是4GB。
- 【STR指令--外部RAM使用】--配置寄存器
STR R0,[R1],#8
:将R0中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1。
STR Rd, [Rn, #offset]
:将 Rd 中的数据写入到存储器(RAM) 中的 Rn+offset 位置。
I.MX6UL 寄存器GPIO1_GDIR 为例,现在我们要配置寄存器 GPIO1_GDIR 的值为 0X200000
LDR R0, =0X0209C004
@将寄存器地址 0X0209C004 加载到 R0 中,即 R0=0X0209C004
LDR R1, =0X20000002
@R1 保存要写入到寄存器的值,即 R1=0X20000002
STR R1, [R0]
@将 R1 中的值写入到 R0 中所保存的地址中
5.其它指令
PUSH 和 POP 是一种多存储和多加载指令,即可以一次操作多个寄存器数据,他们利用当前的栈指针 SP 来生成地址。
- PUSH(入栈)
push ax
:将寄存器ax中的数据送入栈中。
- POP (出栈)
pop ax
:从栈顶取出数据送入ax。
例如:将 R0-R3 和 R12 这 5 个寄存器压栈,当前的 SP 指针指向 0X80000000,处理器的堆栈是向下增长的。
PUSH {R0~R3, R12}
@将 R0-R3 和 R12 压栈
出栈即:
POP {LR}
@先恢复 LR--其中保存的是PC指针。
POP {R0~R3,R12}
@在恢复 R0~R3,R12
10.汇编中使用C指令&C语言中使用汇编
1.汇编中使用C指令
_start:
ldr sp,=0X80200000
@设置栈指针
b main
@跳转到 main 函数---方法一
ldr pc,=main
@这就是汇编调用C函数---方法二
这就是典型的在汇编中初始化 C运行环境,然后跳转到C文件的 main函数中运行,上述代码只是初始化了 SP 指针,有些处理器还需要做其他的初始化,比如初始化 DDR 等等。因为跳转到 C 文件以后再也不会回到汇编了,所以使用了 B 指令来完成跳转。
2.C语言中使用汇编
1.C调用汇编函数
汇编语言中所实现的标号(函数),想让其它文件引用,需要将标号声明为.global属性。
2.C内嵌汇编
以关键字”asm”或”asm”开始,下辖四个部分,各部分之间使用":"分开, 第一部分是必须写的,后面三部分是可以省略,但是冒号:不能省略!
__asm__( 汇编语句部分 :输出部分 -- 可能修改了c语言中变量的值修改了,这些变量就放在输出部分 :输入部分 -- 可能需要从c语言中拿到一些参数作为汇编的操作数,这些参数就是放在输入部分 :破坏描述部分 -- mov r0,#0 这样把r0原来的值破坏了,所以要放到这个地方来。 );
1.汇编语句部分:汇编语句的集合,可以包含多条汇编语句,每条语句之间需要使用换行符 “\n”隔开或使用分号“ ; ”隔开。
2.输出部分:在汇编中被修改的C变量列表
3.输入部分: 作为参数输入到汇编中的变量列表
4.破坏描述部分: 执行汇编指令会破坏的寄存器描述
3.模电
1.三极管--电流器件
三极管是一种具有电流放大功能和开关功能的半导体器件,三极管的应用十分广泛,种类繁多,分类方式也多种多样。
(1)根据结构不同,三极管可分为NPN型三极管和PNP型三极管两种。
(2)根据功率不同,三极管可分为小功率三极管、***率三极管和大功率三极管。
(3)根据工作频率不同,三极管可分为低频三极管和高频三极管。
(4)根据封装形式不同,三极管的外形结构和尺寸有很多种,从封装材料上来说,可分为金属封装型和塑料封装型两种。
(5)根据PN结材料的不同可分为锗三极管和硅三极管,除此之外,还有一-些专用或特殊三极管。
1.NPN
NPN的发射极(e)接地,集电极(c)接高电平,基极(b)接控制信号,用b-e的电流(Ib)控制c-e的电流(Ic),e极电位最低,且正常放大时通常c极电位最高,即Vc> Vb > Ve。三极管导通,电流从c极流向e极。
它就是一个以b(基极)电流Ib来驱动流过ce的电流Ic的器件,它的工作原理很像一个可控制的阀门。左边细管子里蓝色的小水流冲动杠杆使大水管的阀门开大,就可允许较大红色的水流通过这个阀门。当蓝色水流越大,也就使大管中红色的水流更大。如果放大倍数是100,那么当蓝色小水流为1千克/小时,那么就允许大管子流过100千克/小时的水。同理,当三极管的放大倍数为100时,当Ib(基极电流)为1mA时,就允许100mA的电流通过Ice。
2.PNP
PNP的发射极(e)接高电平,集电极(c)接低电平,基极(b)接控制信号,用e-b的电流(Ib)控制e-c的电流(Ic),e极电位最高,且正常放大时通常c极电位最低,即Vc < Vb < Ve。三极管导通,即电流从e极流向c极。
3.LED解释
三极管的用法特点,关键点在于 b 极(基极)和 e 级(发射极)之间的电压情况,对于PNP 而言,e 极电压只要高于 b 级 0.7V 以上,这个三极管 e 级和 c 级之间就可以顺利导通。也就是说,控制端在 b 和 e 之间,被控制端是 e 和 c 之间。同理,NPN 型三极管的导通电压是 b 极比 e 极高 0.7V,总之是箭头的始端比末端高 0.7V 就可以导通三极管的 e 极和 c 极。这就是关于“导通电压顺箭头过,电压导通”的解释。
下面以一个常见的控制LED的电路为例来说明截止与饱和的工作状态。如下图所示,三极管基极通过一个 10K 的电阻接到了单片机的一个 IO口上,假定是 P1,发射极直接接到 5V 的电源上,集电极接了一个 LED ,并且串联了一个 1K 的限流电阻最终接到了电源负极 GND 上。如果 P1由我们的程序给一个高电平 1,那么基极 b 和发射极 e 都是 5V,也就是说 e到 b 不会产生一个 0.7V 的压降,这个时候,发射极和集电极也就不会导通,那么竖着看这个电路在三极管处是断开的,没有电流通过,LED也就不会亮。如果程序给 P1一个低电平 0,这时 e 极还是 5V,于是 e 和 b 之间产生了压差,三极管 e 和 b 之间也就导通了,三极管 e 和 b 之间大概有 0.7V 的压降,那还有(5-0.7)V 的电压会在电阻 R47 上。
2.mos管--电压器件
1) MOS管是一个由改变电压来控制电流的器件,所以是电压器件。
2) MOS管道输入特性为容性特性,所以输入阻抗极高。
1.N沟道
N沟道MOS管的符号,图中D是漏极,S是源极,G是栅极,中间的箭头表示衬底,如果箭头向里表示是N沟道的MOS管
2.P沟道(PNP型)
image.png
P沟道MOS管的符号,图中D是漏极,S是源极,G是栅极,中间的箭头表示衬底,,箭头向外表示是P沟道的MOS管。
3.ADC
4.PWM
#秋招##面试#嵌入式学习笔记 内容设计C语言基础知识、Linux内存管理、操作系统、Linux进程&线程、串口协议、硬件、RAM汇编等 希望秋招的同学早点下车