硬件知识杂记

概念集


非常扎实的C语言功底,如果是安卓开发的话需要JAVA语言
能基本看懂PCB硬件原理图,怎么也得知道哪些引脚是相接的吧
基本的驱动需要知道,比如PWM、串口、iic、SPI、DMA等,这些其实都不难需要了解
基本的网络协议,比如TCP三次握手,ARP协议、DHCP协议、ICMP协议、静态IP和动态IP的区别等
代码管理工具比如git或者svn


对于通讯协议,最基本的是把它分为物理层和协议层。
物理层规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。
协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准。
简单来说物理层规定我们用嘴巴还是用肢体来交流,
协议层则规定我们用中文还是英文来交流。


“总线”指多个设备共用的信号线。


全双工、半双工、单工:
举个半双工例子,一条马路只够一辆车通过,当有两辆车对开,这种情况下就只能一辆先过,另一辆再开,这说明了半双工的原理。


ARM是32位的单片机,具有比较强的事务管理功能,可以用来跑界面、操作系统以及应用程序等;
DSP主要是用来计算的,比如进行加密解密、调制解调等,优势是强大的数据处理能力和较高的运行速度;
FPGA可以用VHDL或verilog HDL来编程,灵活性强,由于能够进行编程、除错、再编程和重复操作,因此可以充分地进行设计开发和验证。当电路有少量改动时,更能显示出FPGA的优势,其现场编程能力可以延长产品在市场上的寿命,而这种能力可以用来进行系统升级或除错。

DSP是通用的信号处理器,用软件实现数据处理;FPGA用硬件实现数据处理

51单片机是MCU;
ARM:M0到A8、A9越来越高端;

ARM系列CPU说明
1、ARM7系列
该系列主要针对某些简单的32位设备,作为目前较旧的一个系列,ARM7处理器已经不建议继续在新品中使用。主要包括ARM7TDMI-S(ARMv4T架构)和ARM7EJ-S(ARMv5TEJ架构)。
2、ARM9系列
主要针对嵌入式实时应用,主要包括ARM926EJ-S、ARM946E-S和 ARM968E-S。
3、ARM11系列
主要应用在高可靠性和实时嵌入式应用领域,主要包括ARM11MPCore、ARM1176、ARM1156、ARM1136。
4、Cortex-R系列
Cortex-R,代表实时的意义(Real-Time),目标是实时任务处理,主要应用领域包括汽车、相机、工业、医学等。该系列处理器主要包括Cortex-R4、Cortex-R5、Cortex-R7、Cortex-R8、Cortex-R52、Cortex-A17。
5、Cortex-M系列
Cortex-M,代表微处理器的意义(Microcontrollers),目标是最节能的嵌入式设备,主要应用领域包括汽车、能源网、医学、嵌入式、智能卡、智能设备。传感器融合、穿戴设备等。该系列处理器主要包括Cortex-M0、Cortex-M0+、Cortex-M3、Cortex-M4、Cortex-M7、Cortex-M23、Cortex-M33、Cortex-M35P。
6、Cortex-A系列
Cortex-A,代表的是先进意义(Advanced),目标是以最佳功耗实现最高性能,主要应用领域包括汽车、工业、医学、调制解调器、存储等。Cortex-A也是目前应用最广的处理器版本。
硬件知识杂记


CPU 力气大啥P事都能干,还要协调。
GPU 上面那家伙的小弟,老大让他处理图形,这方面处理简单,但是量大,老大虽然能处理,可是老大只有那么几个兄弟,所以不如交给小弟处理了,小弟兄弟多,有数百至数千个,而且是专门只干这行和只能干这行。


有源与无源元件:
简单地讲就是需能(电)源的器件叫有源器件,无需能(电)源的器件就是无源器件。有源器件一般用来信号放大、变换等,无源器件用来进行信号传输,或者通过方向性进行“信号放大”。容、阻、感都是无源器件,IC、模块等都是有源器件。(通俗的说就是需要电源才能显示其特性的就是有源元件,如三极管。而不用电源就能显示其特性的就叫无源元件)


这里以偏重嵌入式Linux(ARM)驱动开发为例,给出一条入门的路线。

1、买一款使用广泛、资料多的ARM开发板。因为使用的人多,你遇到的问题别人可能早就遇到并解决了,这样能省很多时间,并且提高自信心。可以到某宝上看看板子。因为是学习使用,最好便宜又适用的。
2、使用vmware安装一个ubuntu系统。在vmware软件中设置物理桥接方式上网。在ubuntu设置好samba服务、nfs服务、tftp服务。
3、首先自己动手亲自编译u-boot、kernel,烧写到板子上(注:有可能rootfs不提供源码,而是提供img镜像文件)。
4、自己修改kernel,并编译busybox,烧写到板子,在板子挂载NFS,在虚拟机交叉编译一个Helloworld程序,并在板子上运行。
5、根据兴趣,开始捣鼓:u-boot、kernel、应用层开发、QT开发。
6、选择自己重点关注方面,继续研究。
这个路线不一定要严格遵守时间轴。


ZYNQ接线情况:

1、JTAG插座指针,接7020的TCK_0 、TMS_0、 TDO_0、 TDI_0、 INIT_B

2、PS_MIO48 、PS_MIO_49接电平转换(1.3–1.8)再引出UART1_TX、UART1_RX
(需在vivado进行TX、RX 的MIO口配置)

3、QSPI接6个MIO 接FLASH芯片128Mbit = 16 MB

4、SDIO接6个IO口(4data),其中SDIO1_D3还要一分为二;如果有CD、WP还需接两个口

5、DDR : MT41K256M16HA-125。两个DDR除了data口和部分控制口,很多口都接的一样的7020上的接口。

6、PL端接以太网

7、网络口12个MIO,接6个TX(1时钟 1控制 4data)、6个RX (1时钟 1控制 4data)。 88E1518芯片,RGMII0

8、USB 12个MIO(8data)


MII、GMII、RGMII 接口

一般用于MAC和PHY的通信。
MII支持速率:10/100 Mbps
GMII支持速率:10M/100M/1000Mb/s
RGMII是Reduced GMII(吉比特介质独立接口),降低电路成本,使实现这种接口的器件的引脚数从22个减少到12个。


常见存储器

RAM、ROM和FLASH三大类。

RAM包括:SRAM、DRAM、SDRAM、DDR SDRAM、DDR2 SDRAM和DDR3 SDRAM

ROM包括:PROM、EPROM和EEPROM

FLASH包括:NOR FLASH和NAND FLASH,结合了RAM和ROM长处

eMMC=NAND flash+controller+standard interface
TF卡是(t-flash)又称micro SD
SD属于FLASH


EEPROM 存储器

EEPROM 是一种掉电后数据不丢失的存储器,常用来存储一些配置信息,以便系统重新上电的时候加载之。EEPOM芯片最常用的通讯方式就是I2C协议

本实验板中的 EEPROM 芯片(型号:AT24C02)的 SCL及 SDA 引脚连接到了 STM32 对应的I2C引脚中,结合上拉电阻,构成了I2C通讯总线,它们通过I2C总线交互。EEPROM芯片的设备地址一共有 7 位,其中高 4 位固定为:1010 b,低 3 位则由 A0/A1/A2 信号线的电平决定,图中的 R/W是读写方向位,与地址无关。
硬件知识杂记
1、编程要点
为了使工程更加有条理,我们把读写 EEPROM 相关的代码独立分开存储,方便以后移植。在“工程模板”之上新建“bsp_i2c_ee.c”及“bsp_i2c_ee.h”文件,这些文件也可根据您的喜好命名,它们不属于 STM32 标准库的内容,是由我们自己根据应用需要编写的。
(1) 配置通讯使用的目标引脚为开漏模式;
(2) 使能 I2C外设的时钟;
(3) 配置 I2C外设的模式、地址、速率等参数并使能 I2C外设;
(4) 编写基本 I2C按字节收发的函数;
(5) 编写读写 EEPROM 存储内容的函数;
(6) 编写测试程序,对读写数据进行校验。

引脚配置
根据硬件封装引脚为宏定义—利用宏初始化I2C GPIO引脚—使能I2C外设的时钟—使能I2C使用的GPIO的端口时钟—向GPIO初始化结构体赋值,把引脚初始化成复用开漏模式,要注意I2C的引脚必须使用这种模式—向寄存器写入参数,完成 GPIO 的初始化
模式配置
把 I2C 外设通讯时钟SCL的低/高电平比设置为 2,使能响应功能,使用 7 位地址 I2C_OWN_ADDRESS7 以及速率配置为 I2C_Speed(前面在 bsp_i2c_ee.h 定义的宏)。最后调用库函数 I2C_Init 把这些配置写入寄存器,并调用 I2C_Cmd 函数使能外设。
为方便调用,我们把 I2C的 GPIO 及模式配置都用 I2C_EE_Init 函数封装起来。


I2C总线

I2C总线是一种同步、双向、半双工的两线式串行接口总线。
SCL+SDA 两条总线
硬件知识杂记

它的物理层有如下特点:
(1) 它是一个支持设备的总线。在一个 I2C 通讯总线中,可连接多个 I2C 通讯设备,支持多个通讯主机及多个通讯从机。
(2) 一个 I2C 总线只使用两条总线线路,一条双向串行数据线(SDA) ,一条串行时钟线(SCL)。数据线即用来表示数据,时钟线用于数据收发同步。
(3) 每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。
(4) 总线通过上拉电阻接到电源。当 I2C 设备空闲时,会输出高阻态,而当所有设备都空闲,都输出高阻态时,由上拉电阻把总线拉成高电平。
(5) 多个主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用总线。
(6) 具有三种传输模式:标准模式传输速率为 100kbit/s ,快速模式为 400kbit/s ,高速模式下可达 3.4Mbit/s,但目前大多 I2C 设备尚不支持高速模式。
(7) 连接到相同总线的 IC 数量受到总线的最大电容 400pF 限制 。

协议层:
主机发数据会带SLAVE_ADDRESS,当主机广播的地址与某个设备地址相同时,这个设备就被选中了,没被选中的设备将会忽略之后的数据信号。
从机接收到匹配的地址后,会返回一个应答(ACK)或非应答(NACK)信号,只有接收到应答信号后,主机才能继续发送或接收数据。
写数据
若配置的方向传输位为“写数据”方向,即第一幅图,广播完地址,接收到应答信号后,主机开始正式向从机传输数据(DATA),数据包的大小为 8 位,主机每发送完一个字节数据,都要等待从机的应答信号(ACK),重复,可以向从机传输 N 个数据,这个 N 没有大小限制。当数据传输结束时,主机向从机发送一个停止传输信号§,表示不再传输数据。
读数据
若配置的方向传输位为“读数据”方向,即第二幅图,广播完地址,接收到应答信号后,从机开始向主机返回数据(DATA),数据包大小也为 8 位,从机每发送完一个数据,都会等待主机的应答信号(ACK),重复这个过程,可以返回 N 个数据,这个 N 也没有大小限制。当主机希望停止接收数据时,就向从机返回一个非应答信号(NACK),则从机自动停止数据传输。

如果我们直接控制 STM32的两个GPIO引脚,分别用作 SCL及 SDA,按照上述信号的时序要求,直接像控制 LED 灯那样控制引脚的输出(若是接收数据时则读取 SDA 电平),就可以实现 I2C 通讯。
由于直接控制 GPIO 引脚电平产生通讯时序时,需要由 CPU 控制每个时刻的引脚状态,所以称之为“软件模拟协议”方式。
相对地,还有“硬件协议”方式,STM32 的 I2C 片上外设专门负责实现 I2C 通讯协议,只要配置好该外设,它就会自动根据协议要求产生通讯信号,收发数据并缓存起来,CPU只要检测该外设的状态和访问数据寄存器,就能完成数据收发。这种由硬件外设处理 I2C协议的方式减轻了 CPU 的工作。


UART 传输器/RS232接口 /RS485接口

RS-232、RS-422、RS-485:是电气协议,接口标准。是对电气特性以及物理特性的规定。
UART:是设备。异步收发传输器。

个人理解:
UART是设备,将并行数据转为串行(一位一位的)数据在线路上发送。
RSXXX是接口标准,它将线路上的电压信号驱动为232或485规定的电平逻辑。
网友理解:
UART可以这样理解:每个SOC芯片,内部都会有UART控制器。但是通常说的UART指的是异步串行通信。规定了数据帧格式,波特率等。
RS232和RS485:是规定了数据通信的电气特性。是物理层的概念,对应的物理器件有RS232或者RS485驱动芯片,将CPU经过UART传送过来的电压信号驱动成RS232或者RS485电平逻辑

UART是通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种异步收发传输器,是设备间进行异步通信的关键模块。
既然是“器”,显然,它就是个设备而已,要完成一个特定的功能的硬件,它本身并不是协议。
它的最基本功能,是串行数据和并行数据之间的转换。
我们知道,计算机中的数据以Byte为基本单位,对一个Byte的存取是并行的,即同时取得/写入8个bit。
而串行通信,需要把这个Byte“打碎”,按照时间顺序来收、发以实现串行。

进一步的,比如确认一个Byte的这8个bit是什么时候开始的,又是什么时候结束的,两个byte之间至少要隔多长时间等等。这一部分,也具有协议的特征。但是与数据传输上的协议,是相对独立的。
硬件知识杂记

若加入一个合适的电平转换器,如SP3232E、SP3485,UART 还能用于RS-232、RS-485 通信,或与计算机的端口连接。

RS-232是美国电子工业协会EIA制定的一种串行物理接口标准。RS是英文“推荐标准”的缩写,232为标识号。
RS-232是对电气特性以及物理特性的规定,只作用于数据的传输通路上,它并不内含对数据的处理方式。
需要说明一下,很多人经常把RS-232、RS-422、RS-485 误称为通讯协议,这是很不应该的,其实它们仅是关于UART通讯的一个机械和电气 接口标准(顶多是网络协议中的物理层面)。


SPI总线

SPI总线是同步、双向、全双工的4线式串行接口总线。SPI是由“单个主设备+多个从设备”构成的系统。需要说明的是:在系统中,只要任意时刻只有一个主设备是处于**状态的,就可以存在多个SPI主设备。常运用于EEPROM、FLASH、实时时钟、AD转换器、数字信号处理器和数字信号解码器之间实现通信。为了实现通信,SPI共有4条信号线,分别是:
硬件知识杂记
(1)主设备出、从设备入(Master Out Slave In,MOSI):由主设备向从设备传输数据的信号线,也称为从设备输入(Slave Input/Slave Data In,SI/SDI)。

(2)主设备入、从设备出(Master In Slave Out,MISO):由从设备向主设备传输数据的信号线,也称为从设备输出(Slave Output/Slave Data Out,SO/SDO)。

(3)串行时钟(Serial Clock,SCLK):传输时钟信号的信号线。

(4)从设备选择(Slave Select,SS):用于选择从设备的信号线,低电平有效。
硬件知识杂记
上图所示芯片有2 个SPI 控制器,SPI 控制器对应SPI 主设备,每个SPI 控制器可以连接多个SPI从设备dev。挂载在同一个SPI 控制器上的从设备共享3 个信号引脚:SCK、MISO、MOSI,但每个从设备的CS 引脚是独立的.

主设备通过控制CS 引脚对从设备进行片选,一般为低电平有效。任何时刻,一个SPI 主设备上只有一个CS 引脚处于有效状态,与该有效CS 引脚连接的从设备此时可以与主设备通信。所以,SPI通信方式可以使用“一主多从”的结构进行通信。每个连接到总线上的器件都有唯一的地址,同一时刻只允许有一个主设备。

GPIO

GPIO初始化,如果是多功能IO口先进行功能选择IO功能,
配置为输入或者输出;
初始化值;
读取、或者写1写0

DMA控制器

(Direct Memory Access:直接内存存取)是一种可以大大减轻CPU工作量的数据转移方式。

当CPU初始化传输动作后,CPU把总线控制权交给DMA控制器,传输动作实际是由DMA控制器来实行和完成的。结束DMA传输后,DMA控制器应立即把总线控制权交回给CPU。

请求
CPU对DMA控制器初始化,并向I/O接口发出操作命令,I/O接口提出DMA请求。
响应
DMA控制器,向总线裁决逻辑提出总线请求。当CPU执行完当前总线周期即可释放总线控制权。此时,总线裁决逻辑输出总线应答,表示DMA已经响应,通过DMA控制器通知I/O接口开始DMA传输。
传输
DMA控制器获得总线控制权后,CPU即刻挂起或只执行内部操作,由DMA控制器输出读写命令,直接控制RAM与I/O接口进行DMA传输。
在传送过开始时需提供要传送的数据的起始位置和数据长度。
结束
当完成数据传送后,DMA控制器即释放总线控制权,并向I/O接口发出结束信号。当I/O接口收到结束信号后,一方面停 止I/O设备的工作,另一方面向CPU提出中断请求,使CPU从不介入的状态解脱,并执行一段检查本次DMA传输操作正确性的代码。最后,带着本次操作结果及状态继续执行原来的程序。

由此可见,DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为RAM与I/O设备开辟一条直接传送数据的通路,使CPU的效率大为提高。

寄存器

1、什么是寄存器?
给有特定功能的内存单元取一个别名,这个别名就是我们经常
说的寄存器,这个给已经分配好地址的有特定功能的内存单元
取别名的过程就叫寄存器映射。

2、什么是存储器映射?
给存储器分配地址的过程叫存储器映射,再分配一个地址叫重
映射。