嵌入式linux之原理图理解1(末尾有视频资料地址)
2019-07-12 16:29发布
生成海报
如何看原理图
在打开原理图时我们可以把原理图架构分为三种结构。 第一个为 GPIO 和门
电路, 第二种为协议类, 第三种为类似内存接口的电路。 下面依次介绍每种结构
的查看步骤。
1 GPIO 和门电路 (generalperipheral input/output 通用输入输出)
1.1 输入输出引脚,上拉电阻(确定悬空引脚的状态) , 三极管
步 骤 : 首 先 打 开 原 理 图 , 查 找 自 己 想 查 的 io 口![](data/attach/1907/578oz2mue6m2jftzim4funtk3a01j3rs.jpg)
这里我们找一个 led 灯的 IO 口![](data/attach/1907/fisrw43gwx5udq3ed8bia2u8i4yp33ky.jpg)
最终确认这个 IO 口是 GPB5
之后我们打开 s3c2440 的数据手册,在这我想查找的是 io 口的配置寄存器, 于是进入 io 目录进入之后查找关于 GPB 的寄存器![](data/attach/1907/4b5s5mnnjrysnbond299m6x9c5yd230k.jpg)
找到了以上四个寄存器, 根据 description 可以知道 GPBCON 寄存器的地址是在 0x56000010,
他的属性是可读可写, 他的作用是设置 Bpin 脚的模式![](data/attach/1907/b3p9jh5jt328mg031hswxdbu15il54rn.jpg)
上面这张图是 GPBCON 寄存器的位值所起的作用, 如果我们想要驱动这个 led 灯, 我们需要
将 PBCON 的 第 十 位 和 十 一 位 设 置 成 01 ( 输 出 模 式 )![](data/attach/1907/1avmhs9cuta4q8m9wnlsfdvszloctjem.jpg)
从上面描述中可以知道 从上面描述中可以知道 GPBDAT 的 0 位到十位的作用是当我们设置为输出模式, 可以给这个
寄存器赋值, 对于 pb5 输出的话就是对 gpbdat 的第五位设置为 0 或 1, 设置 io 口的高低,
如果是输入模式的话可以读取这个寄存器的值来确定输入引脚的高低电平。
GPBUP 的作用是上拉电阻, 上拉下拉电阻的作用是让本来悬空的不确定电压的端口变得有
一个确定的高低电平, 设置输入的时候需要设置上拉电阻的开关。 到此关于 gpio 的查找到
此结束。
1.2 与门, 或门, 非门。
数电知识。
1.3 中断引脚![](data/attach/1907/ewup3lbrhvlrci4kxh7xf90sd6tmyfpa.jpg)
在之前的 GPBCON 中可以把 io 口设置为中断模式, 也就是相应的位设置为 10,
之后可以通过 GPBDAT 寄存器来读取当前的高低电平, 也就是说中断引脚是输入
引脚的扩展, 他的额外作用是可以让 CPU 中断。
2 协议类![](data/attach/1907/1paclnod17u53oq4zny4841acsulwjwf.jpg)
2.1 UART(通用异步收发传输器(Universal Asynchronous Receiver/Transmitter))
这张图是 mini2440 的原理图, 在这个图中我们可以看到有三个串口, TXD 是发送端, RXD
是接收的端口, 因为没有一个固定的时钟来约束它们何时通信, 所以他们属于异步通信。 发
送和接收引脚通过一个 232 电平转换芯片, 改变了高低电平的电压大小, 从而防止了传送线
过 长 而 导 致 的 信 号 衰 减 。![](data/attach/1907/ynz9tappmkc2egpron4hxu5lz6npt9lt.jpg)
对于之前的 gpio 来说只是简单的高低电平的转换, 如何通过高低电平进行通
信就比之前 IO 输入输出要复杂的多。 打个比方 GPIO 是字, 那个协议类就是一个
句子, 它是由字组成, 但是还需要遵循一定的顺序, 并且还要让其他人能够听懂,
不能太快。 对于串口通信的话我们需要设置他的语速-波特率, 如果波特率太高
的话可能会出现识别不了, 另外我们可以设置数据位的个数, 规定几位作为一组
数据, 之后我们可以再加一个停止位, 当然也可以加两个停止位。![](data/attach/1907/qiljkj7dhiayc2khzt8r08cy51vg33rs.jpg)
上面一个图介绍了 2440 如何与 pc 机进行串口通信, 图中 0x41 代表的是字母 A, 转换成二
进制就是 0x01000001,2440 开始向 pc 机传送, 开始时 2440 的 TXD 电位由高变为低代表了开始位, 之后的每个 T 周期内依次代表的数据的高位到低位的数值, 高代表了 1, 低代表了 0,
发送完之后发送高电平代表了停止位, 到此一个 A 的数据也就传送完了。 接下来我们来看
一下 s3c2440 的数据手册中 UART 的控制寄存器![](data/attach/1907/tpp0gcoqwzxums8jrqqepeli8jjek69q.jpg)
图片上面三个寄存器是三个串口的控制寄存器,下面对应的是每个寄存器的各个位所代表的
含义, 【图片上面三个寄存器是三个串口的控制寄存器,下面对应的是每个寄存器的各个位所代表的
含义, 【6】 位为 1 是开启串口模式, 【5: 3】 位则是校验位的设置, 【2】 是停止位, 【1:
0】 是数据长度, 也就是数据位![](data/attach/1907/jmef27gn4i1ny5a1nxxxe4migmbhicr7.jpg)
我们通过对 UTXH0 进行赋值来传输数据, 将 0x41 赋值给该寄存器, 那个数据根据约定好的
协议发送出去。
2.2 I2C
Iic 也是一种一种协议, 在 s3c2440 上可以找到 IIC 的设备如下图。![](data/attach/1907/zd82165dhbi3gy3g9o18l7ilsklgczo5.jpg)
这是一款 IIC 接口的存储芯片, scl 是 clock 时钟, i2csda 是 data 数据端
口 在![](data/attach/1907/3wc0v027ogc3dore8d9mhhcif6j06mwj.jpg)
这里注意一下第九个周期的时候 这里注意一下第九个周期的时候 sda 被 2440 设置成了输入模式, 接收器收到了一个由 IIC
设备传送过来的一个低电平, 代表了该设备接收到了一组数据, 之后继续传送。![](data/attach/1907/hq0393ve2t03rwhqnppa8dtto6cu70f2.jpg)
i2c 的从机地址有 7 位, 也就是说 2^7=128 个设备, 每个型号的芯片都有固定的地址, 我们
通过查找该芯片的数据手册来查找地址![](data/attach/1907/qav9g7pzs1dq8qtupsy9opt01r52kmsb.jpg)
打开 24cXX 的手册之后我们知道 24c08 的地址是 1010A2P1P0 这里的 p0p1 我也不清楚, 但
是和上面必须不同, 以后深入学习的话再研究一下。![](data/attach/1907/mdf8fceu97jzi4cr5y63ne1fvshwj3sq.jpg)
在这里我们做一个例子讲解, 首先 start 开始信号+设备的地址+一位写信号, 24c08 给一个
收到信号的回应 adk,之后 start 开始信号+写的地址,得到回应之后将要写入的数据传送过去。
对于 s3c2440 的话这些协议类的引脚是不需要挨个控制, 他们都有控制器, 我们通过设置这
些寄存器的参数就可以达到控制寄存器的效果。 IIC 就介绍到这。
2.3 NAND FLASH (k9f2g08u0b)
通过查看开发板的 NAND 型号我们找到了与之相对应的 NANDflash,他是 256M*8 位的,
我们从 mini2440 的板子中找到了相应的原理图, 和数据手册一起分析他的功能。从 flash 的芯片手册中我们可以找到对各个引脚的描述, 这里初学就不用太过深入, 这些和
大学里学的微机原理的原理是相通的,在数据手册里面我们可以知道命令字等一些其它的信
息。
关于 nandflash 后面也需要深入学习。
![](data/attach/1907/rxxkzr9uk4hf0jtsxqeyaexve831mkdm.jpg)
2.4 LCD
下面我们介绍最后一个协议类的块, lcd 的接口与工作原理。这是 NANDflash 的原理图根据 LCD 硬件手册理解数据传输, 再查找 s3c2440 数据手册的相关
寄存器来设置时序等。
针对协议类的总结:
1 看清原理图, 2440 和外设芯片引脚对应
2 设置时序: 2440 发出的信号要让外界的芯片能够反应过来
3 看 2440 手册弄清楚能设置那些参数, 理解参数的含义(以 clk 为单位)
4 看外设的芯片手册, 弄清楚这些参数的取值范围(以秒为单位)
5 根据 3, 4 计算出配置时间的寄存器的参数
3 类似内存的接口
3.1 NOR, SDAM,网卡Dm9000
SDRAM 的原理图。
![](data/attach/1907/zvbzylmuowbro0kjkhxguyo77vo0bb90.jpg)
3.2 不同位宽外设的接线, 访问的过程每个芯片都有一个片选信号控制引脚, 当 cpu 向内存控制器发送一个 32 位地址
数据时候, 内存控制器会同过地址的 28-32 位来确定是哪个外设的地址, 打开相
应的片选信号。
这是内存控制器的内存映射管理图, 左边是 norflash 启动的映射, 当地址在 0 到 8000000 的
时候会将 ngcs1 引脚配置成高电平, 访问 srom,当地址是 0x3000000 时候是内存的地址, 这
也是 uboot 为啥要下载到这个地址的原因。 右边是从 nandflash 启动的图, 他没有片选 0 的
信号, 我们把每个 128M 的地址成为一个 bank。
3.3 如何确定访问地址, 设置内存控制器
由上面的原理图可以注意到我们的地址线是 27 条, 并不是 32 条地址线, 这是
因为 128m 的地址需要 27 位来表示, 剩下的几位可以代表片选。 但是并不是这些
地址线都要用到, 当 cpu 发出 0x30000001 的地址时候, 内存控制器访问 sdram,![](data/attach/1907/h86vxropgd4bu6a9cws3bjujo5xzjdr1.jpg)
这张图讲的很清楚 cpu 认为一个地址是一个字节, 但是 nor 认为是两个字节, 所以可以在访
问外设的时候不用接 a0,nor 把两个字节的数据传送过去后, 内存管理根据 A0 的值来选择取
高 8 位还是低 8 位。
其他的配置也是和前面的一样的步骤。
4 重点强调
下面我们对整个开发板进行分析
对于内存类型的外设我们需要查看他的数据地址位, 之后查找 s3c2440 的数据手册中的内存控制器来设置相应片
选设备的位宽和等待信号之后需要查看外设的数据手册确定设备的时间参数然后通过控制这几个寄存器来设置时间,
就可以完成初步的配置。
2018.1.12 链接: https://pan.baidu.com/s/1HuSKPRVi3tVO2cAHTqOhLw 密码: hbdk
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮