嵌入式硬件成长之路

嵌入式硬件成长之路

  • 从电子到集成电路
    • 0与1的电平
    • 0与1的逻辑运算
    • 运算模块之间的控制
    • 机器码与汇编
    • 嵌入式编程(待更新)

从电子到集成电路

现代电子电路最基础的单元就是电子,类似于物理学中的夸克,不管是简单的放大电路还是极其复杂的芯片IC,都是由这一最小单元组成。根据不同的离子掺杂工艺,发展出了PN结和MOS工艺,通过PN结或者MOS管的导电特性,工程师将原件进行逻辑布线,诞生0和1,而这,建立起了嵌入式与实体硬件的桥梁。

0与1的电平

不同物理层对0与1的定义是不同的,常见有TTL电平和CMOS电平。
TTL电平标准:

输出 0: <0.8V ; 1:>2.4V。

输入 0: <1.2V ; 1:>2.0V

TTL器件输出低电平要小于0.8V,高电平要大于2.4V。输入,低于1.2V就认为是0,高于2.0就认为是1。于是TTL电平的输入低电平的噪声容限就只有(0.8-0)/2=0.4V,高电平的噪声容限为(5-2.4)/2=1.3V。

CMOS电平标准:

输出 0: <0.1Vcc ; 1:>0.9Vcc。

输入 0: <0.3Vcc ; 1:>0.7Vcc.

由于CMOS电源采用12V,则输入低于3.6V为低电平,噪声容限为1.8V,高于3.5V为高电平,噪声容限高为1.8V。比TTL有更高的噪声容限。
不同的电平标准,驱动能力(即挂载的外设数上限)、通信速度、对噪声的敏感度都有所不同,实际嵌入式开发过程中,需要根据外设的技术手册确定相关电平标准。当主控IC与外设的电平标准不同时,需要在通信线路中加上电平转换电路,防止电平不同造成的逻辑混乱、甚至电源灌流烧坏逻辑器件。
电平转换电路如下:
嵌入式硬件成长之路_第1张图片

0与1的逻辑运算

对于一个输出结果为0、1属性的电路(即数字电路),基本的运算电路为与、非、或,由几个基本逻辑单元,以有无同步时钟作为分水岭,诞生了组合逻辑电路与时序逻辑电路(在组合逻辑电路中,着重注意一下竞争和冒险)。
竞争:在组合电路中,信号经由不同的路劲达到某一会合点的时间有先有后的现象;
冒险:由于竞争而引起电路输出发生瞬间错误。表现为输出端出现了原设计中没有的窄脉冲(毛刺)。
以下电路来源于ycc_job

CMOS非门:
嵌入式硬件成长之路_第2张图片
CMOS与非门:
嵌入式硬件成长之路_第3张图片
CMOS或非门:
嵌入式硬件成长之路_第4张图片
上述的电路通过不同的组合,可以实现不同逻辑的运算,MOS结构是IC内部的基本结构,无数个MOS组成的逻辑,上亿个晶体管,组成我们的运算器(即现在的CPU)。

运算模块之间的控制

当逻辑运算系统及其庞大时,就需要对信号流进行控制,否则极易产生竞争和冒险,所以,在庞大的数字电路系统中,我们需要很多MOS管组成的门进行信号流的分配、分流、控制,在参考时钟的有序控制下,进行精确的数字运算。众所周知,MOS管的开断通过栅极电压控制,这里,以此类推,对于一个门极,1是开启电压,0是关闭电压,所以我们可以用0和1控制一条线上的信号开断,无数个0和1组成了嵌入式最基础的机器码,所以机器码最根本的作用,就是对门极信号的控制。

机器码与汇编

如果说机器码是简单的01组合成的庞大的指令,那么汇编是机器码之上的低级语言,在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。不同平台的汇编指令可能会有很大的区别,例如X86架构与ARM架构的汇编指令就有所区别。
例如:
X86和ARM的传递指令都是MOV
MOV X1 X2
而X86的出栈指令为POP,ARM的出栈指令为LDP
X86:POP
ARM:LDP x29, x30, [sp,#0x10]
所以,不同的架构,我们对照该架构的指令就能对目标地址、寄存器进行底层操作,从而达到简单的程序编写。
举例:

;hello-os
;TAB=4
;以下这段是标准FAT12格式软盘专用代码
 DB 0xeb,0x4e,0x90
 DB "HELLOIPL" ;启动区的名称可以是任意的字符串(8byte)
 DW 512  ;每个扇区的大小为512byte
 DB 1  ;簇的大小为1sector
 DW 1  ;FAT起始位置
 DB 2  ;FAT个数
 DW 224  ;根目录的大小
 DW 2880  ;该磁盘大小
 DB 0xf0  ;磁盘种类
 DW 9  ;FAT的长度
 DW 18  ;1个磁道18个扇区
 DW 2  ;磁头数
 DD 0  ;不使用分区
 DD 2880  ;重写一次磁盘的大小
 DB 0,0,0X29  ;
 DD 0xffffffff  ;
 DB "HELLO-OS   " ;磁盘名称11byte
 DB "FAT12   " ;磁盘格式名称8byte
 RESB 18  ;空18byte
 ;程序主题
  DB 0xb8,0x00,0x00,0x8e,0xd0,0xbc,0x00,0x7c
 DB 0x8e,0xd8,0x8e,0xc0,0xbe,0x74,0x7c,0x8a
 DB 0x04,0x83,0xc6,0x01,0x3c,0x00,0x74,0x09
 DB 0xb4,0x0e,0xbb,0x0f,0x00,0xcd,0x10,0xeb
 DB 0xee,0xf4,0xeb,0xfd
 ;信息显示部分
  DB 0x0a,0x0a  ;2个换行
 DB "hello world qian"
 DB 0x0a  ;
 DB 0
  RESB 0x1fe-$  ;填写0x00,直到0x001fe
 DB 0x55,0xaa
 ;以下是启动区以外部分的输出
  DB 0xf0,0xff,0xff,0x00,0x00,0x00,0x00,0x00
 RESB 4600
 DB 0xf0,0xff,0xff,0x00,0x00,0x00,0x00,0x00
 RESB 1469432

上述简单的汇编程序,实现了X86架构软盘自启动hello world的功能,利用PC独特BIOS指令实现对屏幕的输出。

嵌入式编程(待更新)

你可能感兴趣的:(硬件以及驱动,经验分享)