《linux 设备驱动开发详解4.0》 第二章 驱动设计的硬件基础基础--总结

1.处理器

1.1处理器--通用处理器

目前主流的通用处理器(GPP)多采用 SoC(片上系统)的芯片设计方法,集成了各种功能模块,每一种功能都是由硬件描述语言设计程序,ARM 主控芯片的集成度非常高,除了集成多核 ARM 以外,还可能集成图形处理器、视频编解码器、浮点协处理器、GPS、WiFi、蓝牙、基带、Camera 等一系列功能。

*处理器的体系结构可以分为两类:
1.冯·诺依曼结构        ARM的ARM7、MIPS公司的MIPS处理器
2.哈佛结构                 AVR、ARM9、ARM10、ARM11 以 及Cortex A系列

冯·诺依曼结构 ; 也称普林斯顿结存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同。

哈佛结构: 将程序指令和数据分开存储,指令和数据可以有不同的数据宽度。此外,哈佛结构还采用了独立的程序总线和数据总线,分别作为 CPU 与每个存储器之间的专用通信路径,具有较高的执行效率。


《linux 设备驱动开发详解4.0》 第二章 驱动设计的硬件基础基础--总结

*处理器从指令集的角度也可以分为两类:
1.RISC(精简指令集计算机)                   ARM、MIPS、PowerPC等CPU内核都采用了RISC 指令集。
2.CISC(复杂指令集计算机)

CSIC 强调增强指令的能力、减少目标代码的数量,但是指令复杂,指令周期长;
RISC 强调尽量减少指令集、指令单周期执行, 但是目 标代码会更 大。


1.2数字信号处理器

数字信号处理器(DSP)针对通信、图像、语音和视频处理等领域的算法而设计。它包含独立的硬件乘法器。 DSP 的乘法指令一般在单周期内完成,且优化了卷积、数字滤波、 FFT (快速傅里叶变换)、相关矩阵运算等算法中的大量重复乘法。
DSP分为两类:
1.定点 DSP    DSP只能用定点运算模拟浮点运算
2.浮点 DSP   浮点DSP的浮点运算用硬件来实现,可以在单周期内完成,因而其浮点运算处理速度高于定点 DSP。


1.3专用处理器(ASP)

*处理器选择:
在实际项目的硬件方案中,往往会根据应用的需求选择通用处理器、数字信号处理器、特定领域处理器、CPLD(复杂可编程逻辑器件)/FPGA(现场可编程门阵列)或 ASIC 之一的解决方案,在复杂的系统中,这些芯片可能会同时存在,协同合作,各自发挥自己的长处。如在一款智能手机中,可使用 MCU 处理图形用户界面和用户的按键输入并运行多任务操作系统,使用DSP进行音视频编解码,而在射频方面则采用 ASIC。


《linux 设备驱动开发详解4.0》 第二章 驱动设计的硬件基础基础--总结

2.存储器

存储器主要可分类为只读储存器(ROM)、闪存(Flash)、随机存取存储器(RAM)、光 /磁介质储存器。

(1)ROM
ROM 还可再细分为不可编程 ROM、 可编程 ROM(PROM)、 可 擦 除 可 编 程 ROM(EPROM)和电可擦除可编程 ROM(E 2 PROM),E 2 PROM 完全可以用软件来擦写,已经非常方便了。

(2)NOR和 NAND
NOR(或非)和 NAND(与非)是市场上两种主要的 Flash 闪存技术。

NOR Flash 和 CPU 的接口属于典型的类 SRAM 接口(如图 2.5 所示),不需要增加额外的控制电路。NOR Flash 的特点是可芯片内执行(eXecute In Place,XIP),程序可以直接在NOR 内运行。
NAND Flash 和 CPU 的接口必须由相应的控制电路进行转换,当然也可以通过地址线或 GPIO 产生 NAND Flash 接口的信号。NAND Flash 以块方式进行访问,不支持芯片内执行.

《linux 设备驱动开发详解4.0》 第二章 驱动设计的硬件基础基础--总结

与 NOR Flash 的类 SRAM 接口不同,一个 NAND Flash 的接口主要包含如下信号。
1. I/O 总线:地址、指令和数据通过这组总线传输,一般为 8 位或 16 位。
2. 芯片启动(Chip Enable,CE#):如果没有检测到 CE 信号,NAND 器件就保持待机模式,不对任何控制信号做出响应。
3. 写使能(Write Enable,WE#):WE# 负责将数据、地址或指令写入 NAND 之中。
4. 读使能(Read Enable,RE#):RE# 允许数据输出。
5. 指令锁存使能(Command Latch Enable,CLE):当 CLE 为高电平时,在 WE# 信号的
上升沿,指令将被锁存到 NAND 指令寄存器中。
6. 地址锁存使能(Address Latch Enable,ALE):当 ALE 为高电平时,在 WE# 信号的上
升沿,地址将被锁存到 NAND 地址寄存器中。
7. 就绪 / 忙(Ready/Busy,R/B#):如果 NAND 器件忙,R/B# 信号将变为低电平。该信号是漏极开路,需要采用上拉电阻。

NAND Flash和NOR Flash比较:

NAND Flash 较 NOR Flash 容量大,价格低;NAND Flash 中每个块的最大擦写次数是 100万次,而 NOR 的擦写次数是 10 万次;NAND Flash 的擦除、编程速度远超过 NOR Flash。由于 Flash 固有的电器特性,在读写数据过程中,偶然会产生 1 位或几位数据错误,即位反转,NAND Flash 发生位反转的概率要远大于 NOR Flash。位反转无法避免,因此,使用NAND Flash 的同时,应采用错误探测 / 错误更正(EDC/ECC)算法。

Flash 的编程原理都是只能将 1 写为 0,而不能将 0 写为 1。因此在 Flash 编程之前,必须将对应的块擦除,而擦除的过程就是把所有位都写为 1 的过程,块内的所有字节变为0xFF。另外,Flash 还存在一个负载均衡的问题,不能老是在同一块位置进行擦除和写的动作,这样容易导致坏块。

NOR Flash 可以使用 SPI 接口进行访问以节省引脚。相对于传统的并行 NOR Flash 而言,SPI NOR Flash 只需要 6 个引脚就能够实现单 I/O、双 I/O 和 4 个 I/O口的接口通信,有的 SPI NOR Flash 还支持 DDR 模式,能进一步提高访问速度到 80MB/s。

IDE(Integrated Drive Electronics)接口可连接硬盘控制器或光驱,IDE 接口的信号与SRAM 类似。人们通常也把 IDE 接口称为 ATA(Advanced Technology Attachment)接口


以上所述的各种 ROM、Flash 和磁介质存储器都属于非易失性存储器(NVM)的范畴,掉电时信息不会丢失,而 RAM 则与此相反。


(3)RAM

RAM 也可再分为静态 RAM(SRAM)和动态 RAM(DRAM)。DRAM 以电荷形式进行存储,数据存储在电容器中。由于电容器会因漏电而出现电荷丢失,所以 DRAM 器件需要定期刷新。

SRAM 是静态的,只要供电它就会保持一个值,SRAM 没有刷新周期。每个SRAM 存储单元由 6 个晶体管组成 

DRAM 存储单元由 1 个晶体管和 1 个电容器组成。

通常所说的 SDRAM、DDR SDRAM 皆属于 DRAM 的范畴,它们采用与 CPU 外存控制器同步的时钟工作(注意,不是与 CPU 的工作频率一致)。与 SDRAM 相比,DDR SDRAM同时利用了时钟脉冲的上升沿和下降沿传输数据,因此在时钟频率不变的情况下,数据传输频率加倍。此外,还存在使用 RSL(Rambus Signaling Level,Rambus 发信电平)技术的RDRAM(Rambus DRAM)和 Direct RDRAM

DPRAM:双端口 RAM
DPRAM 的特点是可以通过两个端口同时访问,具有两套完全独立的数据总线、地址总线和读写控制线,通常用于两个处理器之间交互数据,如图 2.6 所示。当一端被写入数据后,另一端可以通过轮询或中断获知,并读取其写入的数据。由于双 CPU 同时访问 DPRAM 时的仲裁逻辑电路集成在 DPRAM 内部,所以需要硬件工程师设计的电路原理比较简单

DPRAM 的优点是通信速度快、实时性强、接口简单,而且两边处理器都可主动进行数据传输。除了双端口 RAM 以外,目前 IDT 等芯片厂商还推出了多端口 RAM,可以供3个以上的处理器互通数据。

《linux 设备驱动开发详解4.0》 第二章 驱动设计的硬件基础基础--总结

CAM:内容寻址 RAM
CAM 是以内容进行寻址的存储器,是一种特殊的存储阵列 RAM,它的主要工作机制就是同时将一个输入数据项与存储在 CAM 中的所有数据项自动进行比较,判别该输入数据项与 CAM 中存储的数据项是否相匹配,并输出该数据项对应的匹配信息。

FIFO:先进先出队列
FIFO存储器的特点是先进先出,进出有序,FIFO多用于数据缓冲。FIFO和DPRAM类似,具有两个访问端口,但是FIFO 两边的端口并不对等,某一时刻只能设置为一边作为输入,一边作为输出。
如果FIFO的区域共有n个字节,我们只能通过循环n次读取同一个地址才能将该片区域读出,不能指定偏移地址。对于有n个数据的FIFO,当循环读取m次之后,下一次读时会自动读取到第m + 1个数据,这是由 FIFO 本身的特性决定的。

《linux 设备驱动开发详解4.0》 第二章 驱动设计的硬件基础基础--总结


3.接口与总线

(1)串口

RS-232RS-422 与 RS-485 都是串行数据接口标准

RS-232C 是嵌入式系统中应用最广泛的串行接口,它为连接 DTE(数据终端设备)与 DCE(数据通信设备)而制定。RS-232C 标准接口有 25条线(4 条数据线、11 条控制线、3 条定时线、7 条备用和未定义线),常用的只有 9 根,它们是 RTS/CTS(请求发送 / 清除发送流控制)、RxD/TxD(数据收发)、DSR/DTR(数据终端就绪 / 数据设置就绪流控制)、 DCD (数据载波检测,也称 RLSD,即接收线信号检出)、Ringing-RI(振铃指示)、SG(信号地)信号。RTS/CTS、RxD / TxD、DSR/DTR 等信号的定义如下:
1. RTS:用来表示 DTE 请求 DCE 发送数据,当终端要发送数据时,使该信号有效。
2. CTS:用来表示 DCE 准备好接收 DTE 发来的数据,是对 RTS 的响应信号。
3. RxD:DTE 通过 RxD 接收从 DCE 发来的串行数据。
4. TxD:DTE 通过 TxD 将串行数据发送到 DCE。
5. DSR:有效(ON 状态)表明 DCE 可以使用。
6. DTR:有效(ON 状态)表明 DTE 可以使用。
7. DCD :当本地 DCE 设备收到对方 DCE 设备送来的载波信号时,使 DCD 有效,通知DTE 准备接收,并且由 DCE 将接收到的载波信号解调为数字信号,经 RxD 线送给DTE。
8. Ringing-RI:当调制解调器收到交换台送来的振铃呼叫信号时,使该信号有效(ON 状态),通知终端,已被呼叫。

最简单的 RS-232C串口只需要连接RxD、TxD、SG这3个信号,并使用XON/XOFF软件流控。
组成一个 RS-232C 串口的硬件连接:从 CPU 到连接器依次为 CPU--->UART(通用异步接收器发送器,作用是完成并 / 串转换)--->CMOS/TTL 电平与 RS-232C 电平转换--->DB9/DB25 或自定义连接器

UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。UART作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输。

《linux 设备驱动开发详解4.0》 第二章 驱动设计的硬件基础基础--总结

(2)  I2C

I2C(内置集成电路)总线用于连接微控制器及其外围设备。I 2 C 总线简单而有效,占用的 PCB(印制电路板)空间
很小,芯片引脚数量少,设计成本低。I2C 总线支持多主控(Multi-Mastering)模式,任何能够进行发送和接收的设备都可以成为主设备。主控能够控制数据的传输和时钟频率,在任意时刻只能有一个主控。

组成I2C总线的两个信号为数据线 SDA 和时钟 SCL。为了避免总线信号的混乱,要求各设备连接到总线的输出端必须是开漏输出或集电极开路输出的结构。总线空闲时,上拉电阻使SDA和SCL线都保持高电平。根据开漏输出或集电极开路输出信号的“线与”逻辑,I2C总线上任意器件输出低电平都会使相应总线上的信号线变低

I2C设备上的串行数据线 SDA接口电路是双向的,输出电路用于向总线上发送数据,输入电路用于接收总线上的数据。同样地,串行时钟线SCL也是双向的,作为控制总线数据,传送的主机要通过SCL输出电路发送时钟信号,并检测总线上SCL上的电平以决定什么时候发下一个时钟脉冲电平;作为接收主机命令的从设备需按总线上SCL的信号发送或接收SDA上的信号,它也可以向SCL线发出低电平信号以延长总线时钟信号周期。

当SCL稳定在高电平时,SDA由高到低的变化将产生一个开始位,而由低到高的变化则产生一个停止位。开始位和停止位都由I2C主设备产生。

开始和结束信号产生的时序
当SCL稳定在高电平时,SDA由高到低的变化将产生一个开始位,而由低到高的变化则产生一个停止位。开始位和停止位都由I2C主设备产生。

I2C总线时序
在选择从设备时,如果从设备采用7位地址,则主设备在发起传输过程前,需先发送1字节的地址信息,前7位为设备地址,最后1位为读写标志。之后,每次传输的数据也是1字节,从MSB开始传输。每个字节传完后,在 SCL的第9个上升沿到来之前,接收方应该发出1个ACK位,SCL上的时钟脉冲由I2C主控方发出,在第8个时钟周期之后,主控方应该释放SDA。

《linux 设备驱动开发详解4.0》 第二章 驱动设计的硬件基础基础--总结


(3)SPI

SPI(Serial Peripheral Interface,串行外设接口)总线系统是一种同步串行外设接口,它可以使 CPU 与各种外围设备以串行方式进行通信以交换信息。 一 般主控SoC作为SPI的“主”,而外设作为SPI的“从”。
SPI接口一般使用4条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线SS

在SPI总线的传输中,SS信号是低电平有效的,当我们要与某外设通信的时候,需要将该外设上的SS线置低。此外,特别要注意 SPI 从设备支持的 SPI
总线最高时钟频率(决定了 SCK 的频率)以及外设的 CPHA、CPOL 模式,这决定了数据与时钟之间的偏移、采样的时刻以及触发的边沿是上升沿还是下降沿

SPI模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性(CPOL)和相位(CPHA)可以进行配置。如果CPOL= 0,串行同步时钟的空闲状态为低电平;如果 CPOL= 1,串行同步时钟的空闲状态为高电平。如果CPHA= 0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。

《linux 设备驱动开发详解4.0》 第二章 驱动设计的硬件基础基础--总结


《linux 设备驱动开发详解4.0》 第二章 驱动设计的硬件基础基础--总结


(4)USB

USB(通用串行总线):
USB 1.1 包含全速和低速两种模式:
低速方式的速率为 1.5Mbit/s,支持一些不需要很大数据吞吐量和很高实时性的设备,如鼠标等。
全速模式为 12Mbit/s,可以外接速率更高的外设。

USB 2.0 中,增加了一种高速方式,数据传输率达到 480Mbit/s,半双工,可以满足更高速外设的需要。USB 2.0 总线的机械连接非常简单,采用 4 芯的屏蔽线,一对差分线(D+、D-)传送信号,另一对(VBUS、电源地)传送 +5V 的直流电

USB 3.0(也被认为是 Super Speed USB)的最大传输带宽高达 5.0Gbit/s(即 640MB/s),全双工。
USB 3.0 线缆则设计了 8 条内部线路,除VBUS、电源地之外,其余 3 对均为数据传输线路。其中保留了 D+ 与 D- 这两条兼容 USB2.0 的线路,新增了SSRX 与 SSTX 专为 USB 3.0 所设的线路。

嵌入式系统中,电路板若需要挂接 USB 设备,则需提供 USB 主机(Host)控制器和连接器;若电路板需要作为 USB 设备,则需提供 USB 设备适配器和连接器。目前,大多数SoC 集成了 USB 主机控制器(以连接 USB 外设)和设备适配器


每一个 USB 设备会有一个或者多个逻辑连接点在里面,每个连接点叫端点。
USB 提供了多种传输方式以适应各种设备的需要,一个端点可以选择如下一种传输方式。
1. 控制(Control)传输方式
控制传输是双向传输,数据量通常较小,主要用来进行查询、配置和给 USB 设备发送通
用命令。所有 USB 设备必须支持标准请求(Standard Request),控制传输方式和端点 0。
2. 同步(Isochronous)传输方式
同步传输提供了确定的带宽和间隔时间,它用于时间要求严格并具有较强容错性的流数
据传输,或者用于要求恒定数据传送率的即时应用。例如进行语音业务传输时,使用同步传
输方式是很好的选择。同步传输也常称为“ Streaming Real-time ”传输。
3. 中断(Interrupt)传输方式
中断方式传送是单向的,对于 USB 主机而言,只有输入。中断传输方式主要用于定时查
询设备是否有中断数据要传送,该传输方式应用在少量分散的、不可预测的数据传输场合,
键盘、游戏杆和鼠标属于这一类型。
4. 批量(Bulk)传输方式
批量传输主要应用在没有带宽、间隔时间要求的批量数据的传送和接收中,它要求保证传输。打印机和扫描仪属于这种类型。而 USB 3.0 则增加了一种 Bulk Streams 传输模式,USB 2.0 的 Bulk 模式只支持 1 个数据流,而 Bulk Streams 传输模式则可以支持多个数据流,每个数据流被分配一个 Stream ID (SID),每个 SID 与一个主机缓冲区对应。

在 USB 架构中,集线器负责检测设备的连接和断开(hub),利用其中断 IN 端点(Interrupt IN Endpoint)来向主机报告。一旦获悉有新设备连接上来,主机就会发送一系列请求给设备所挂载的集线器,再由集线器建立起一条连接主机和设备之间的通信通道。然后主机以控制传输的方式,通过端点 0 对设备发送各种请求,设备收到主机发来的请求后回复相应的信息,进行枚举(Enumerate)操作。因此 USB 总线具备热插拔的能


(5)以太网

以太网接口由 MAC(以太网媒体接入控制器)和 PHY(物理接口收发器)组成。以太网 MAC 由 IEEE 802.3 以太网标准定义,实现了数据链路层。常用的 MAC 支持 10Mbit/s 或100Mbit/s 两种速率。吉比特以太网(也称为千兆位以太网)是快速以太网的下一代技术,将网速提高到了 1000 Mbit/s。千兆位以太网以 IEEE 802.3z 和 802.3ab 发布,作为 IEEE 802.3标准的补充。

MAC 和 PHY 之间采用 MII(媒体独立接口)连接,它是 IEEE-802.3 定义的以太网行业标准,包括 1 个数据接口与 MAC 和 PHY 之间的 1 个管理接口。数据接口包括分别用于发送和接收的两条独立信道,每条信道都有自己的数据、时钟和控制信号,MII 数据接口总共需要 16 个信号。MII 管理接口包含两个信号,一个是时钟信号,另一个是数据信号。通过管理接口,上层能监视和控制 PHY。

一个以太网接口的硬件电路原理: 从CPU到最终接口依次为CPU、MAC、PHY、以太网隔离变压器、RJ45 插座。以太网隔离变压器是以太网收发芯片与连接器之间的磁性组件,在其两者之间起着信号传输、阻抗匹配、波形修复、信号杂波抑制和高电压隔离作用。

《linux 设备驱动开发详解4.0》 第二章 驱动设计的硬件基础基础--总结


许多处理器内部集成了 MAC 或同时集成了 MAC 和 PHY,另有许多以太网控制芯片也集成了 MAC 和 PHY。


(6)PCI PCI-E

PCI(外围部件互连)是由 Intel 于 1991 年推出的一种局部总线,作为一种通用的总线接口标准,它在目前的计算机系统中得到了非常广泛应用。PCI 总线具有如下特点。
1. 数据总线为 32 位,可扩充到 64 位。
2. 可进行突发(Burst)模式传输。突发方式传输是指取得总线控制权后连续进行多个数据的传输。突发传输时,只需要给出目的地的首地址,访问第 1 个数据后,第 2 ~ n
个数据会在首地址的基础上按一定规则自动寻址和传输。与突发方式对应的是单周期方式,它在 1 个总线周期只传送 1 个数据。
3. 总线操作与处理器—存储器子系统操作并行。
4. 采用*集中式总线仲裁。
5. 支持全自动配置、资源分配,PCI 卡内有设备信息寄存器组为系统提供卡的信息,可
实现即插即用。
6. PCI 总线规范独立于微处理器,通用性好。
7. PCI 设备可以完全作为主控设备控制总线。

图是一个典型的基于 PCI 总线的计算机系统逻辑示意图,系统的各个部分通过PCI 总线和 PCI-PCI 桥连接在一起。CPU 和 RAM 通过 PCI 桥连接到 PCI 总线 0(即主 PCI
总线),而具有 PCI 接口的显卡则可以直接连接到主 PCI 总线上。PCI-PCI 桥是一个特殊的PCI 设备,它负责将 PCI 总线 0 和 PCI 总线 1(即从 PCI 主线)连接在一起,通常 PCI 总线 1称为 PCI-PCI 桥的下游(Downstream),而 PCI 总线 0 则称为 PCI-PCI 桥的上游(Upstream)。为了兼容旧的 ISA 总线标准,PCI 总线还可以通过 PCI-ISA 桥来连接 ISA 总线,从而支持以前的ISA设备。


《linux 设备驱动开发详解4.0》 第二章 驱动设计的硬件基础基础--总结



当PCI卡刚加电时,卡上配置空间即可以被访问。PCI 配置空间保存着该卡工作时所需的所有信息,如厂家、卡功能、资源要求、处理能力、功能模块数量、主控卡能力等。通过对这个空间信息的读取与编程,可完成对 PCI 卡的配置。如图所示,PCI 配置空间共为256 字节,主要包括如下信息。
1. 制造商标识(Vendor ID):由 PCI 组织分配给厂家。
2. 设备标识(Device ID):按产品分类给本卡的编号。
3. 分类码(Class Code):本卡功能的分类码,如图卡、显示卡、解压卡等。
4. 申请存储器空间:PCI 卡内有存储器或以存储器编址的寄存器和 I/O 空间,为使驱动程序和应用程序能访问它们,需申请 CPU 的一段存储区域以进行定位。配置空间的
基地址寄存器用于此目的。
5. 申请 I/O 空间:配置空间中的基地址寄存器用来进行系统 I/O 空间的申请。
6. 中断资源申请:配置空间中的中断引脚和中断线用来向系统申请中断资源。偏移3Dh 处为中断引脚寄存器,其值表明 PCI 设备使用了哪一个中断引脚,对应关系为1—INTA#、2—INTB#、3—INTC#、4—INTD#。

《linux 设备驱动开发详解4.0》 第二章 驱动设计的硬件基础基础--总结


(7)
SD和SDIO

SD(Secure Digital)是一种关于 Flash 存储卡的标准,也就是一般常见的 SD 记忆卡,在设计上与 MMC(Multi-Media Card)保持了兼容。SDHC(SD High Capacity)是大容量 SD 卡,支持的最大容量为 32GB。2009 年发布的 SDXC(SD eXtended Capacity)则支持最大 2TB 大
小的容量。

SDIO(Secure Digital Input and Output Card,安全数字输入输出卡)在 SD 标准的基础上,定义了除存储卡以外的外设接口。SDIO 主要有两类应用——可移动和不可移动。不可移动设备遵循相同的电气标准,但不要求符合物理标准。现在已经有非常多的手机或者手持装置都支持 SDIO 的功能,以连接 WiFi、蓝牙、GPS 等模块。

一般情况下,芯片内部集成的 SD 控制器同时支持 MMC、SD 卡,又支持 SDIO 卡,但是 SD 和 SDIO 的协议还是有不一样的地方,支持的命令也会有不同。
SD/SDIO 的传输模式有:
1. SPI 模式
2. 1 位模式
3. 4 位模式

SDIO 接口的引脚定义。其中 CLK 为时钟引脚,每个时钟周期传输一个命令或数据位;CMD 是命令引脚,命令在 CMD 线上串行传输,是双向半双工的(命令从主机到从卡,而命令的响应是从卡发送到主机);DAT[0]~DAT[3] 为数据线引脚;在 SPI 模式中,第8脚位被当成中断信号。图给出了一个 SDIO 单模块读、写的典型时序。

《linux 设备驱动开发详解4.0》 第二章 驱动设计的硬件基础基础--总结

《linux 设备驱动开发详解4.0》 第二章 驱动设计的硬件基础基础--总结




eMMC(Embedded Multi Media Card)是当前移动设备本地存储的主流解决方案,目的在于简化手机存储器的设计。eMMC 就是 NAND Flash、闪存控制芯片和标准接口封装的集合,它把 NAND 和控制芯片直接封装在一起成为一个多芯片封装(Multi-Chip Package,MCP)芯片。eMMC 支持 DAT[0]~DAT[7] 8 位的数据线。上电或者复位后,默认处于 1 位模式,只使用DAT[0],后续可以配置为4位或者8位模式


2.4 CPLD FPGA

CPLD(复杂可编程逻辑器件)由完全可编程的与或门阵列以及宏单元构成。CPLD 中的基本逻辑单元是宏单元,宏单元由一些“与或”阵列加上触发器构成,其中“与或”阵列完成组合逻辑功能,触发器完成时序逻辑功能。宏单元中与阵列的输出称为乘积项,其数量标示着 CPLD 的容量。乘积项阵列实际上就是一个“与或”阵列,每一个交叉点都是一个可编程熔丝,如果导通就是实现“与”逻辑。

FPGA(现场可编程门阵列)基于 LUT(查找表)工艺。查找表本质上是一片 RAM,当用户通过原理图或 HDL(硬件描述语言)描述了一个逻辑电路以后,FPGA 开发软件会自动计算逻辑电路所有可能的结果,并把结果事先写入 RAM。这样,输入一组信号进行逻辑运算就等于输入一个地址进行查表以输出对应地址的内容。

CPLD 和 FPGA 的主要厂商有 Altera、Xilinx 和 Lattice 等,它们采用专门的开发流程,在设计阶段使用 HDL(如 VHDL、Verilog HDL)编程。它们可以实现许多复杂的功能,如实现 UART、I 2 C 等 I/O 控制芯片、通信算法、音视频编解码算法等,甚至还可以直接集成ARM 等 CPU 内核和外围电路。

对于驱动工程师而言,我们只需要这样看待 CPLD 和 FPGA :如果它完成的是特定的接口和控制功能,我们就直接把它当成由很多逻辑门(与、非、或、D 触发器)组成的可完成一系列时序逻辑和组合逻辑的 ASIC ;如果它完成的是 CPU 的功能,我们就直接把它当成CPU。


2.5 原理图分析

原理图分析的含义是指通过阅读电路板的原理图获得各种存储器、外设所使用的硬件资源、接口和引脚连接关系。若要整体理解整个电路板的硬件组成,原理图的分析方法是以主CPU 为中心向存储器和外设辐射,步骤如下:

1. 阅读 CPU 部分,获知 CPU 的哪些片选、中断和集成的外设控制器在使用,列出这些元素 a、b、c、...。
CPU 引脚比较多的时候,芯片可能会被分成几个模块并单独画在原理图的不同页上,这时应该把相应的部分都分析到位。
2. 对第1步中列出的元素,从原理图中对应的外设和存储器电路中分析出实际的使用情况。


2.6硬件时序分析

时序分析的概念
时序分析的意思是让芯片之间的访问满足芯片数据手册中时序图信号有效的先后顺序、采样建立时间(Setup Time)和保持时间(Hold Time)的要求,在电路板工作不正常的时候,准确地定位时序方面的问题。

建立时间是指在触发器的时钟信号边沿到来以前,数据已经保持稳定不变的时间,如果建立时间不够,数据将不能在这个时钟边沿被打入触发器;
保持时间是指在触发器的时钟信号边沿到来以后,数据还需稳定不变的时间,如果保持时间不够,数据同样不能被打入触发器。

最典型的硬件时序是 SRAM 的读写时序,在读/写过程中涉及的信号包括地址、数据、片选、读/写、字节使能和就绪/忙。对于一个 16 位、32 位(甚至 64 位)的 SRAM,字节使能表明哪些字节被读写。

图给出了SRAM的读时序,写时序与此相似。首先,地址总线上输出要读(写)的地址,然后发出 SRAM 片选信号,接着输出读(写)信号,之后读(写)信号要经历数个等待周期。当SRAM读(写)速度比较慢时,等待周期可以由 MCU 的相应寄存器设置,也可以通过设备就绪/忙(如图中的 nWait)向 CPU 报告,这样,读写过程中会自动添加等待周期。

NOR Flash 和许多外设控制芯片都使用了类似SRAM的访问时序,因此,牢固掌握这个时序意义重大。一般,在芯片数据手册给出的时序图中,会给出图中各段时间的含义和要
求,真实的电路板必须满足芯片数据手册中描述的建立时间和保持时间的最小要求。

《linux 设备驱动开发详解4.0》 第二章 驱动设计的硬件基础基础--总结

2.7芯片数据手册阅读方法

芯片数据手册往往长达数百页,甚至上千页,而且全部是英文,从头到尾不加区分地阅读需要花费非常长的时间,而且不一定能获取对设计设备驱动有帮助的信息。芯片数据手册的正确阅读方法是快速而准确地定位有用信息,重点阅读这些信息,忽略无关内容。

芯片手册的第 1 章“ PRODUCT OVERVIEW”(产品综述)是必读的,通过阅读这一部分可以获知整个芯片的组成。这一章往往会给出一个芯片的整体结构图,并对芯片内的
主要模块进行一个简洁的描述。

第 2 章“MemoryMap ”(内存映射)比较关键,对于定位存储器和外设所对应的基址有直接指导意义,这一部分应该细看。

第3~34章对应于CPU内部集成的外设或总线控制器,当具体编写某接口的驱动时,应该详细阅读,主要是分析数据、控制、地址寄存器(数据手册中一般会以表格列出)的访
问控制和具体设备的操作流程(数据手册中会给出步骤,有的还会给出流程图)。


2.8仪器仪表使用

(1)万用表
在电路板调试过程中主要使用万用表的两个功能。
1. 测量电平。
2. 使用二极管挡测量电路板上网络的连通性,当示波器被设置在二极管挡,测量连通的
网络会发出“嘀嘀”的鸣叫,否则,没有连通。

(2)示波器
示波器是利用电子示波管的特性,将人眼无法直接观测的交变电信号转换成图像,显示在荧光屏上以便测量的电子仪器。它是观察数字电路实验现象、分析实验中的问题、测量实验结果必不可少的重要仪器。

(3)逻辑分析仪
逻辑分析仪是利用时钟从测试设备上采集数字信号并进行显示的仪器,其最主要的作用是用于时序的判定。与示波器不同,逻辑分析仪并不具备许多电压等级,通常只显示两个电压(逻辑 1 和 0)。在设定了参考电压之后,逻辑分析仪通过比较器来判定待测试信号,高于参考电压者为 1,低于参考电压者为 0。