嵌入式 Linux C ARM 嵌入式linux嵌入式

Linux嵌入式开发入门(二)——快速看懂原理图,对接软件开发

2017-08-02  本文已影响224人  故事狗

这里只是为了看懂原理图,不牵扯具体的计算等内容(比如电路电流多少啊,三极管放大等等)。因为对于嵌入式开发人员来说,只需要明白不同的电平对于开发板的结果即可,不需要知道具体电路的情况。

微机原理:侧重于讲计算机结构
数字电子技术基础:侧重于门电路


只要上面的2440芯片对应的引脚应该为输出引脚。如果对应的输出引脚输出3.3V的高电平LED就会被点亮;如果输出引脚输出低电平(0V),那么LED则不亮


以上的线路很简单,开关闭合线路接通有电流;开关打开,线路不导通,无电流。
如果在开关打开的前提下,A点使用万用表测量,电压应该为3.3v,因为,如果此时这里不为3.3V与之相连的上方为3.3V就会形成电流,与实际不符;如果此时开关闭合,那么该线路是接通状态,应该有电流流过,那么此时,A点的电流应该为0V。

那么如果把万用表换成2440芯片会得到。

那么此时2440对应的引脚应该为输入引脚,通过读取该引脚对应的寄存器中的数据,就可以知道该引脚为高电平还是低电平。如果读到了高电平,说明此处为3.3V电路没有接通了如果读到了低电平,说此处为0V,说明电路接通了。以此可以判断开关的开闭情况。

对于现在的芯片的引脚来说,既可以作为输入引脚,同样也可以作为输出引脚。可以通过配置其中参数的某一位(具体参照手册)的方法来改变其功能。
输出引脚,写值到某个寄存器中
输入引脚,读某个寄存器中的值。

实际原理图

LED处的原理图 芯片引脚的原理图

由以上两幅图可以看出,LED由某一个引脚引入到芯片中。就可以找到对应的芯片中的引脚。通过该芯片手册就可以查到该如何操作。
由LED的原理图可以看出,三个控制LED的引脚的功能都不是为了检测电压,那么都是输出引脚,也就是如果输出了低电平,则LED被点亮;输出高电平,则灯会熄灭。

在芯片手册中查询该引脚的信息


查看到pin name为EINT3/GPF3 的引脚的pin number为M15


可以看到该引脚既可以作为输入引脚也可以作为输出引脚

可以在I/O port章节中看到,这一组引脚的应该如何配置

那么如果将GPF的寄存器配置为EINT[4]时,则该引脚会成为中断引脚


中断引脚举例

对于假设2440外连接一个DM9000的网卡,如果网卡收到了数据,如何来通知2440芯片呢?如果定时让2440去查询DM9000,是一个非常耗费资源的工作,那么这时候,如果把对应的引脚设置为中断引脚,只要DM9000获得了数据,就把想2440的中断引脚输出高电平,2440得到高电平后,向CPU发送中断信号,以执行相应的操作即可。
中断引脚,有输入功能,可以中断CPU(同样可以通过GPFDAT来获得数据已得到是否中断,但是比较耗费资源)

GPFCON就是配置GPF引脚的内存地址为0x56000050

参照接下面的表格可以看出,对于GPF4来说,需要操作8、9两位来控制该引脚的输入输出功能。具体的设置情:
00 = Input 01 = Output 10 = EINT[4] 11 = Reserved

那么如何设置该引脚输出低电平来点亮LED呢?
在GPFDAT中可以看到数据配置信息的地址为:0x56000054

GPFDAT配置

可以看到,如果配置为输入引脚,那么对应的位中的数据就是读取到的数据,也就是读到1为高电平,读到0为低电平。如果配置为输出引脚,如果写入1为输出高电平,如果写入0则输出低电平。

在手册中不难看出,还有一个GPFUP


GPFUP

这个是上拉电阻的意思,至于上拉电阻的问题,还需要看看三极管。

NPN三极管

对于NPN三极管来说,如果此时2440芯片的引脚为输出引脚,并且输出的为低电平,那么此时,三极管处于不导通的状态。但是对于三极管另外一个管脚来说,状态未知,所以,在此管脚上接通一个电阻,以方便得到他的状态。
那么此时,如果输出一个低电平,三极管不导通,那么,此时的输入管脚会得到一个高电平。而反之,如果输出为高电平,那么输入会得到一个低电平。所以输出和输入为反相的情况。

那么引脚的上拉功能是什么呢?可以假设在芯片内部存在一个上拉电阻,当寄存器设置为1则该电阻不通电。



假设这样的电路,其中上拉电阻是位于芯片内部的,对应的引脚是输入引脚,如果上拉电阻设置为断开,此时开关也不打开,对于中间一段电路来说是“悬空的”,无法获取其中的电路。
如果此时设置了上拉功能,就出现了图上的情况,是一个完整的电路,也就可以测量出芯片外的电平情况。如果获取到的信息为高电平说明开关未被按下;如果获取低电平,说明此时形成了回路,开关被按下。

上拉电阻的作用,对于输入引脚,可以用它来确定电平状态。

还存在一种下拉电阻的情况

PNP三极管和上拉电阻

对于PNP类型的三极管来说,如果2440芯片输出低电平,那么此时三极管处于导通的状态,此时输入能够得到一个高电平;那么反之,如果输出是一个高电平,三极管不导通,那么此时输入会得到低电平。

上拉电阻和下拉电阻的作用主要是为了,确定“悬空的引脚”的确定的状态。

对于与门是对A1和A2做与运算B = A1 & A2,如果A1和A2中只要任意一个或者同时输出了低电平,那么B会输出低电平;如果A1、A2同时输出高电平,在B会得到高电平

- 或门
或门
对于或门来说,就是对A1和A2做或运算,B = A1 || A2,当A1、A2中,只要输出至少一个高电平,对于B来说都会得到高电平。如果A1、A2同时输出低电平,那么B会得到低电平
 - 与非门
与非门
- 或非门
或非门 2440芯片手册中的UART寄存器部分

由手册可以看到,2440芯片具有三个串口的寄存器。寄存器中数据的不同位分别表示了数据长度、停止位、校验位等信息。

串口控制器数据段的寄存器

现在已经知道如何设置串口控制器的一些参数,以及数据应该放在哪个寄存器中。但是还有一个关键数据没有设置,那就是发送数据的速度——波特率

波特率的寄存器设置

硬件上其实相对比较简单,最少只需要三条线即可完成串口,一条发送、一条接受还有一条参考地线。

一款存储芯片的I2C电路 可以连接多个I2C的芯片

每个I2C设备中一定有一个地址,只有地址相同的时候,才会响应。
I2C开始发送数据,开始会先发送7位数的从机地址[可以在芯片手册里面获取](pow(2, 7) 为128,也就是最多可以有128个外置设备被同一个芯片控制),第8位表示读写状态。地址匹配完成会得到响应信号(ACK),说明这个设备是存在的。

I2C开始和停止的时序图

开始信号:2440让时钟SCL保持高电平,数据SDA由高电平调转到低电平
停止线号:2440让式中SCL保持高电平,数据SDA由低电平跳转到高电平。

I2C的总线响应

响应信号(ACK):接收器在接收到8位数据后,在第9个时钟周期,拉低SDA为低电平。
也就是在第9个时钟周期,2440会将SDA设置为接受引脚,有AT24C02来驱动,以检测是否成功接收数据。

I2C数据的采集

SDA上传输的数据必须在SCL为高电平的期间保持稳定,外部设备会在SCL在高电平的时候读取数据
SDA上的数据只能在SCL为低电平期间发生变化

不论是何种I2C芯片,start信号之后,都会发送设备地址,以及读写信息。之后的数据的含义需要具体查看对应芯片的手册上面的规则。

我们也不需要控制I2C的引脚应该如何控制电平,我们只需要控制I2C控制器即可。

假设有这样一款SPI的芯片 SPI和2440的接线

其中片选引脚需要在2440上找一个GPIO引脚,并设置为输出引脚,以方便可以连接多个SPI设备。
与SPI的数据通信需要三条线,分别为时钟、输入、输出。
对于上方图示的SPI芯片来说,Vcc用于接电源来为SPI芯片供电。Vss接地。W接写保护,如果为低电平则无法对芯片进行写入。HOLD可以暂停任何操作,低电平有效。

对于硬件的接线,基本上是找到对应的引脚,将其连接在一起即可。数据传输,需要查看对应芯片的协议。

2440芯片关于SPI所支持的四种通信方式 SPI芯片手册中的读取时序 SPI芯片手册中的写入时序图

有芯片手册可以得到,开始8位被称为指令,其中包括9位地址的最高位,以及是写还是读。第二个八位数据是SPI芯片的地址。之后才是数据的传输部分。

Nand Flash芯片的接线原理图 芯片手册对引脚功能的说明

有说明可以知道,I/O0~I/O7的八个引脚可以用于传输数据、地址、命令(读写擦除等)。但是芯片如何才能区分这几个引脚传入的数据到底是地址、命令还是数据呢?
在芯片上还有CLE引脚,如果为高电平,表示这8个引脚所传输的为命令。ALE为高电平表示,8个引脚所传输的数据为内存地址。两者都是低电平是,那么说明这8个引脚上传输的是数据信息。RE为低电平是,说明信号是从2440到Nand flash,WE为低电平说明,是从Nand Flash读取信息。其中WP为写保护引脚,为低电平是为写保护状态。R/B为状态引脚,通过该引脚入股哦为高电平说明Nand已经完毕,可以操作,如果为低电平,说芯片还在工作,处于繁忙的状态

发送命令操作的时序图 发送地址的时序图 向Nand Flash中写数据的时序图 读取数据的时序图

2440在发送脉冲的阶段必须有一定的时间要求,否则,可能Nand Flash不能反应过来。需要查询手册中的时序要求。

设置2440的Nand Flash控制器中的寄存器,可以使得2440发送的控制Nand Flash的信号满足要求
如何设置时序:

  1. 看2440手册,有哪些参数可以设置
原理图

协议类的的学习思路

  1. 看原理图:2440和外接芯片引脚对接即可
内存芯片的原理图 Nor Flash的原理图 网卡的原理图

有这三幅图可以看出来,他们都有大量的地址线和数据线。

抽象图

那么可以抽象出这样一幅图,这三个芯片上都有一组地址线通往2440芯片,同时也有一组数据线通往2440芯片。那么,2440在和SDRAM通信时,如何避免NOR FLASH和网卡不会造成干扰呢?
在这些芯片和2440连接的时候,每个芯片还都有一个独立的片选芯片/CSx (Chip Selected)。CS引脚是低电平有效,那么只需要将需要被选中的芯片的对应片选引脚输出低电平。

其中两块SDRAM芯片使用同一个片选线,那么此时可以一次性选中两块芯片,每次读取32位数据时,每个芯片可以提供16位数据。

我们不需要手工设置片选引脚。在2440中有一个内存控制器和CPU。CPU发出的地址信号发送给地址控制器,由地址控制器根据收到的内存地址来决定哪个片选引脚输出低电平。

内存控制器的内存范围

有图上可以看出,如果是NOR启动的情况下,地址在0到0x8000000的范围以内(128M),内存控制器就会让nGCS0被选中,以此类推。
如果不是NOR启动的情况下,那么则无法选中nCGS0。
每一个片选引脚对应的地址范围成为一个Bank,对应这个芯片来说,每个Bank为128M ,其中128M是2的27次方(M为2的10次方,128为2的7次方),那么说明,数据的传送需要使用27根地址线,那么范围应该是ADDR0~ADDR26。
CPU为32位,不代表有32条地址线。CPU范围A地址,地址总长度为32为,其中bit 0 ~ bit 26,会出现在地址线上,而剩下的bit 31 ~ bit 27,是有内存控制器来决定,实际是没有用的。CPU实际是发出了32bit的地址,但是内存控制器只能控制26位。
比如64位CPU来说,实际理论可以支持的最大内存大小为2^64,相当于16,777,216TB,而实际电脑的最大内存不会有这么大,他的最大可用内存由内存控制器来决定。而32位CPU支持的仅仅最大4GB的内存,一般内存控制器可以实现。所以,这就是对于32位的电脑来说,最大的内存支持为4GB;而64位CPU所支持的最大内存可能并不相同。

那么对于内存来说,很重要的功能就是读写。有了地址线、数据线,还有一个非常重要的就是如何来区分是读取还是写入。
所以在内存的芯片上一定是有某某使能的引脚。我们看到在芯片上有nOE和nWE的引脚,他们分别是Output Enable和Write Enable的引脚,并且是以低电平有效。那么他们就是输出使能和写入使能。对于芯片来说的输出,对于2440来说就是读取数据;反之对芯片来说写入,对于2440来说就是写入数据。

对于RAM-like芯片来说,通讯所需要的最少的线路

从原理图可以看到,Nor Flash是从Addr1开始使用,没有从Addr0开始使用。
不同位宽外设的接线方式
CPU认为一个地址对应一个字节;NOR认为一个地址对应两个字节。(16位的NOR,一次只能读取或写入16位也就是两个字节)
假设CPU访问地址为3的一个字节,那么NOR会读取到地址为2~3的数据。再由内存控制器,从两个自己的内存里面取出自己需要的数据。
如果访问地址2的一个字节,NOR会取出2~3的内存地址的数据。内存控制器,再由其中取出需要使用的数据。
由于1字节和2字节之间相差2倍,那么对于地址的最低位其实是无用的。所以ADDR0作为最后一位的地址是无用的。所以没必要再连接这条线。

上一篇 下一篇

猜你喜欢

热点阅读