名詞、概念解釋


@

概念集


嵌入式工程師需要非常扎實的C語言功底,
能基本看懂PCB硬件原理圖,怎么也得知道哪些引腳是相接的吧
基本的驅動需要知道,比如PWM、串口、iic、SPI、DMA等,這些其實都不難需要了解
基本的網絡協議,比如TCP三次握手,ARP協議、DHCP協議、ICMP協議、靜態IP和動態IP的區別等
代碼管理工具比如git或者svn


對於通訊協議,最基本的是把它分為物理層和協議層。
物理層規定通訊系統中具有機械、電子功能部分的特性,確保原始數據在物理媒體的傳輸。
協議層主要規定通訊邏輯,統一收發雙方的數據打包、解包標准。
簡單來說物理層規定我們用嘴巴還是用肢體來交流,
協議層則規定我們用中文還是英文來交流。


“總線”指多個外設共用的信號線。外設 與 處理器核 的通信道路。


全雙工、半雙工、單工:
舉個半雙工例子,一條馬路只夠一輛車通過,當有兩輛車對開,這種情況下就只能一輛先過,另一輛再開,這說明了半雙工的原理。


1、一般而言,嵌入式系統的構架可以分為4個部分:分別是(處理器)、存儲器、輸入/輸出和軟件,一般軟件亦分為操作系統相關和(應用軟件)兩個主要部分。 
2、根據嵌入式系統使用的微處理器,可以將嵌入式系統分為嵌入式微控制器,(嵌入式DSP處理器),(嵌入式微處理器)以及片上系統。 
3、操作系統是聯接硬件與應用程序的系統程序,其基本功能有(進程管理)、進程間通信、(內存管理)、I/O資源管理。 
4、從嵌入式操作系統特點可以將嵌入式操作系統分為(實時操作系統)和分時操作系統,其中實時系統亦可分為(硬實時系統)和軟實時系統。 
5、內核負責管理各個任務,或者為每個任務分配CPU時間,並且負責任務之間的(通信),內核的基本服務是(任務切換)。 
6、嵌入式開發一般采用(宿主機/目標機方式)方式,其中宿主機一般是指(PC機或者台式機)。 
7、哈佛體系結構數據空間和地址空間(分開),ARM7TDMI采用(馮諾依曼體系)的內核架構。  
8. ARM7TDMI采用(3)級流水線結構,ARM920TDMI采用(5 )級流水線。 
9 .按操作系統的分類可知,Dos操作系統屬於順序執行操作系統,Unix操作系統屬於(分時)操作系統,VxWorks屬於(實時嵌入式)操作系統。 
10、ARM7TDMI中,T表示支持16位Thumb指令集,D表示(在片可調試),M表示內嵌乘法器Multiplier,I表示(嵌入式ICE),支持在線斷點和調試。


搶占式和非搶占式的區別:
執行的過程中對中斷處理方式不一樣,搶先式:某一中斷執行完成后,如果有更高優先級的任務處於就緒狀態,將執行更高優先級任務,而非搶占式不一樣,一個任務只有主動放棄CPU的控制權,其它任務才能夠獲得CPU的控制權。

需求分析--方案設計--方案評審--方案實施--集成測試、性能測試、可靠性測試--評審總結


ARM是32位的單片機,具有比較強的事務管理功能,可以用來跑界面、操作系統以及應用程序等;
DSP主要是用來計算的,比如進行加密解密、調制解調等,優勢是強大的數據處理能力和較高的運行速度;
FPGA可以用VHDL或verilog HDL來編程,靈活性強,由於能夠進行編程、除錯、再編程和重復操作,因此可以充分地進行設計開發和驗證。當電路有少量改動時,更能顯示出FPGA的優勢,其現場編程能力可以延長產品在市場上的壽命,而這種能力可以用來進行系統升級或除錯。

DSP是通用的信號處理器,用軟件實現數據處理;FPGA用硬件實現數據處理

51單片機是MCU;
ARM型號:M0到A8、A9越來越高端;
ARM架構:V1到V7、V8越來越高端。

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、模塊等都是有源器件。(通俗的說就是需要電源才能顯示其特性的就是有源元件,如三極管。而不用電源就能顯示其特性的就叫無源元件)


嵌入式系統的硬件核心部件是嵌入式處理器,嵌入式處理器有四種類型
第一種 微處理器(MPU)Motorola的68K系列和Intel的X86系列
第二種 微控制器(MCU、單片機)
第三種 數字信號處理器(DSP)
第四種 片上系統(SOC)


這里以偏重嵌入式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、選擇自己重點關注方面,繼續研究。
這個路線不一定要嚴格遵守時間軸。


Bootloader

BootLoader是在嵌入式系統復位啟動時,操作系統內核運行前,執行的一段程序。
通過BootLoader,初始化硬件設備,建立內存和I/O空間映射圖,為最終加載操作系統內核調整好適當的系統軟硬件環境。


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)

在這里插入圖片描述

在這里插入圖片描述


ZYNQ OCM和DDR配置(都是RAM)

CPU0:
ram0:包含3塊64KB的OCM
ddr:CPU0的啟動地址,以及DDR占用大小
ram1:包含64KB的OCM
在這里插入圖片描述
CPU1:
ram0:包含3塊64KB的OCM
ddr:CPU1的啟動地址,以及DDR占用大小
ram1:包含64KB的OCM
在這里插入圖片描述
由資源圖可知,OCM是共享的,CPU0和1可以操作同一個地址的OCM;
DDR是獨占的,采用把總DDR分成合適的兩塊,分配給CPU0和1 。


ZYNQ MIO和EMIO

ZYNQ GPIO 接口信號被分成四組,分別是從 BANK0 到 BANK3。
BANK0 和 BANK1 中共計 54個信號通過 MIO 連接到 ZYNQ 器件的引腳上,這些引腳屬於 PS 端;
BANK2 和 BANK3 中共計 64 個信號則通過 EMIO 連接到了 ZYNQ 器件的 PL 端。

GPIO_MIO 可連接到外設 LED 和 KEY 上,這些 GPIO_MIO 當作 GPIO 使用來驅動
外設 LED 和 KEY。由於這些引腳都是 PS 的引腳,不需要在 PL 中進行引腳位置約束。
而GPIO_EMIO需要管腳約束,例如PL的L20腳接一個按鍵,L20位於bank3,電壓為3.3V,需配置如下,再保存。即完成了管腳約束。
在這里插入圖片描述
在這里插入圖片描述


處理器與處理器核:

STM32 系列處理器中使用 ARM Cortex M0/3/4/7 核作為處理器核。
在 ARM 提供的處理器核 IP(Processor IP) 基礎上,ST 為其添加了一系列外設,包括串口,定時器,DMA等,以及 SRAM 和片上 FLASH 這樣的 Memory ,一起流片做成了一顆 STM32。
STM32這樣一個微處理器,其實也是一個 SoC (System on Chip)片上系統。

接着斷言:Zynq 與其說是 FPGA ,不如說 Zynq 就是 SoC。而其處理器核為 ARM A9。
那么 Zynq 的 FPGA 邏輯部分怎么說,實際上 PL (Programable Logic 指 FPGA 中的可編程邏輯資源)需要聽 ARM 核的指揮,某種程度上 PL 是 ARM 核的一項外設,或者說協處理器。

處理器外設:

外設在處理器系統中指的是 GPIO,UART,DMA 這些處理器的組件,他們聽從處理器核的指揮,干他們自己的活兒,比如打印串口信息。對於 STM32 這樣的單片機來說,外設只有一種,那就是固化的硬件電路,這和處理器核是一樣的,都是不能修改的 ASIC (專用硬件電路)。

但 Zynq 的情況就有所不同,擁有兩類不同的外設。
在這里插入圖片描述
一類是和 STM32 單片機相同的PS上硬件電路外設,這部分硬件電路和處理器核一起組成了 Zynq 的處理器系統(Processor System)。

另一類外設由 FPGA 部分的可編程邏輯(PL)構成,它們最大的特點在於可編程,無論是外設的數量還是類型。某個部分的邏輯資源可以在先前作為串口使用,過會兒就可以作為 SPI 接口,這種變化甚至能夠動態進行。在 Zynq 上,我們可以使用PL硬件資源部署 N個硬件串口等等。。。

PL 外設相比 PS 外設的缺點在於速度要慢一些,穩定性也可能稍差。

所以,Zynq 擁有兩類外設:PS 或者 PL。其中 PL 外設又可以分為兩類:標准 IP 和自定義 IP。標准 IP,包括 FIFO,RAM,AXI-Uart,AXI-Jtag 等等。

總線:

SoC 還有一個很重要的組成部分是總線。總線將處理器核和外設連接到一起。
處理器核的指令就通過總線傳輸到各個外設。

Zynq 中主要的總線是 AXI4 總線,這是一種由 ARM 提出的標准化 IP 間總線。

Zynq 中不只存在 AXI4 系列總線,在 PS 中 ARM 核和片上外設之間的連接通過 APB,AHB 總線進行,和 STM32 使用相同的總線。APB,AHB 總線和 AXI4 類似,實際上他們都屬於 ARM AMBA 協議族。

在軟件編程的過程中,總線操作由底層 IO 驅動負責,所以並不需要加以關注。但在編寫硬件 IP 的過程中,需要對總線的接口加以了解。

PL、PS以太網:

use_axieth_on_zynq 設為0:將使用PS端以太網,
XPAR_XEMACPS_0_BASEADDR (0XE000B000)
use_axieth_on_zynq 設為1:將使用PL端以太網,
XPAR_AXIETHERNET_0_BASEADDR(0x41000000)

ZYNQ外設驅動過程:

https://zhuanlan.zhihu.com/p/58737537

驅動函數 實質是 對外設寄存器的讀寫操作。

BSP設置中勾選驅動,會從安裝目錄把驅動程序拷貝到項目下的bsp中。
硬件配置好后,外設會自動生成配置table,包括ID和絕對地址等等。

外設初始化套路:
1、定義外設信息結構體,利用ID獲取外設信息,信息來自底層硬件;

XScuTimer_Config *ConfigPtr;
ConfigPtr = XScuTimer_LookupConfig(TIMER_DEVICE_ID);

2、定義外設實例結構體,調用初始化函數。作為全局變量供上層使用。

static XScuTimer TimerInstance;
Status = XScuTimer_CfgInitialize(&TimerInstance, ConfigPtr,
			ConfigPtr->BaseAddr);

3、對外設的啟動、停止等操作皆是讀寫寄存器。而讀寫最底層又皆是Xil_In32/ Xil_Out32 函數

void XScuTimer_Start(XScuTimer *InstancePtr)
{
	u32 Register;
	Xil_AssertVoid(InstancePtr != NULL);
	Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);

	Register = XScuTimer_ReadReg(InstancePtr->Config.BaseAddr,
				  XSCUTIMER_CONTROL_OFFSET);
	Register |= XSCUTIMER_CONTROL_ENABLE_MASK;
	XScuTimer_WriteReg(InstancePtr->Config.BaseAddr,
			XSCUTIMER_CONTROL_OFFSET, Register);
	InstancePtr->IsStarted = XIL_COMPONENT_IS_STARTED;
}

串口驅動過程:

1、系統時鍾配置初始化
2、UART0初始化
a)引腳的配置
b)FIFO緩沖器的使用
c)波特率的配置和數據幀格式的設置
3、串口收發程序:字節收發、字符串發送

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、
SD屬於FLASH、
TF卡是(t-flash)又稱micro SD、
SSD。

存儲器的分級策略, 從快到慢分別是:
寄存器、
L1 cache(CPU緩存)、
L2 cache(CPU緩存)、
L3 cache(CPU緩存)、
內存、
硬盤/固態硬盤SSD。

固態硬盤的存儲介質分為兩種:
基於閃存的固態硬盤:采用FLASH芯片作為存儲介質,這也是通常所說的SSD。
基於DRAM的固態硬盤:采用DRAM作為存儲介質,應用范圍較窄。

機械硬盤的原理:電磁存儲

堆棧:

CPU干的活就是初始化MMU和TLB等等,其中比較關鍵的就是初始化堆棧(SP寄存器指向棧頂),前面也提及過,在鏈接的時候分配了堆棧空間,而堆棧對C語言函數是非常重要的。

棧的作用:一般來說函數調用或者中斷,都會涉及到現場保護和現場恢復,被保護的現場實際上就是CPU的幾個專用的reg,以及正在執行的函數的局部變量等數據,這些數據會被推進棧內,其相應的SP寄存器也會加上入棧數據的長度,在函數執行返回揮着中斷返回時,棧內的數據按順序再次出來,總體來說就是先進后出。

而堆的作用一般就是給系統動態分配存儲空間的,包括用戶經常調用的malloc說分配的空間,就是在堆里。簡而言之,堆棧的完成初始化是為了c語言函數提供了環境。否則C語言是無法正確被執行的。

zynq啟動需要OCM和DDR(也有只利用OCM啟動的教程),如圖可以看到堆棧都是占用的DDR內存:
在這里插入圖片描述

STM32 :

一般我們說STM32內部FLASH的時候,都是指主存儲器區域,它是存儲用戶應用程序的空間,芯片型號說明中的1M FLASH、2M FLASH都是指這個區域的大小。
主存儲器分為兩塊,共2MB,每塊內分12個扇區,其中包含4個16KB扇區、1個64KB扇區和7個128KB的扇區。
如我們實驗板中使用的STM32F429IGT6型號芯片,它的主存儲區域大小為1MB,所以它只包含有表中的扇區0-扇區11。

系統存儲區是用戶不能訪問的區域,它在芯片出廠時已經固化了啟動代碼,它負責實現串口、USB以及CAN等ISP燒錄功能。

STM32不可以跑Linux,
不過uclinux貌似可以,得外加nor flash和sram才可以,所以實用價值不高。


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 沒有大小限制。當數據傳輸結束時,主機向從機發送一個停止傳輸信號(P),表示不再傳輸數據。
讀數據
若配置的方向傳輸位為“讀數據”方向,即第二幅圖,廣播完地址,接收到應答信號后,從機開始向主機返回數據(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:是設備。異步收發傳輸器。

下圖中我們可以看出ZYNQ中,硬件使能MIO(可連接LED或者輸入等)和使能UART、SPI、I2C是相同的方式。
在這里插入圖片描述

個人理解:
UART是設備,將並行數據轉為串行(一位一位的)數據在線路上發送。
RSXXX是接口標准,它將線路上的電壓信號驅動為232或485規定的電平邏輯。
網友理解:
UART可以這樣理解:每個SOC芯片,內部都會有UART控制器。但是通常說的UART指的是異步串行通信。規定了數據幀格式,波特率等。
RS232和RS485:是規定了數據通信的電氣特性。是物理層的概念,對應的物理器件有RS232或者RS485驅動芯片,將CPU經過UART傳送過來的電壓信號驅動成RS232或者RS485電平邏輯

常說的Uart串口指的是TTL電平的串口;RS232串口指的是RS232電平的串口。
Uart串口的RXD、TXD等一般直接與處理器芯片的引腳相連,而RS232串口的RXD、TXD等一般需要經過電平轉換(通常由Max232等芯片進行電平轉換)才能接到處理器芯片的引腳上,否則這么高的電壓很可能會把芯片燒壞。

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通訊的一個機械和電氣 接口標准(頂多是網絡協議中的物理層面)。


NOR、 NAND、 SPI、 CFI、 JEDEC、NVRAM

Flash,按照內部訪問接口不同,分為兩種,
一種是就像訪問SDRAM一樣,按照數據/地址總線直接訪問的Nor Flash,
另一種是只有8位(X8)/16位(X16)或者更多(X32/...)位寬的總線,每次訪問,都要將長地址分成幾部分,一點點的分別傳入才能訪問的Nand Flash。

而其中的Nor Flash,根據外部接口分,又有並行的CFI接口和串行的SPI接口。
另外,CFI接口是JEDEC定義的,所以又稱CFI接口為JEDEC接口。
所以,可以簡單理解為:對於Nor Flash來說,CFI接口=JEDEC接口=Parallel接口

NVRAM(Non-Volatile Random Access Memory) :非易失性隨機訪問存儲器,指斷電后仍能保持數據的一種RAM。
RAM(Random Access Memory):易失性隨機訪問存儲器,斷電之后信息就丟失了的RAM。

NVRAM可以隨機訪問。因此有些解釋中,說Flash是屬於NVRAM,是不准確的!!
因為從嚴格意義上來說,Flash分有兩種:nand flash和nor flash。其中的nor屬於是可以隨機訪問的,而nand flash不是真正的隨機訪問,屬於順序訪問(serial access)。

SPI總線和QSPI

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 引腳是獨立的.

QSPI

QSPI是Queued SPI的簡寫,是Motorola公司推出的SPI接口的擴展,比SPI應用更加廣泛。在SPI協議的基礎上,Motorola公司對其功能進行了增強,增加了隊列傳輸機制,推出了隊列串行外圍接口協議(即QSPI協議)。QSPI 是一種專用的通信接口,連接單、雙或四(條數據線) SPI Flash 存儲介質。共有SNCS,SCLK,BK0,BK1,BK2,BK3共6根接線,可以實現多種通信模式。
主設備通過控制CS 引腳對從設備進行片選,一般為低電平有效。任何時刻,一個SPI 主設備上只有一個CS 引腳處於有效狀態,與該有效CS 引腳連接的從設備此時可以與主設備通信。所以,SPI通信方式可以使用“一主多從”的結構進行通信。每個連接到總線上的器件都有唯一的地址,同一時刻只允許有一個主設備。

在這里插入圖片描述


SPI、I2C、UART三者關系

I2C:半雙工,串行同步通信;
SPI:全雙工,串行同步通信;
UART:串行異步通信

總線:物理層,相當於馬路。例如I2C總線;
協議:協議層,相當於交通規則。例如I2C協議;
數據:相當於車輛,在指定馬路上,按照其交通規則,才能正確傳輸。

CAN通信

CAN總線ID是包含在報文幀中的。
1、主要用作CAN總線的仲裁使用,ID值越低,報文優先級越高,在兩組不同ID報文同時上線時候,仲裁機制使得ID值低的占用總線,ID值高的退出。

2、ID域可以是11位和29位,其值和含義可以由用戶自定義,例如0x0CE2505F(可定義為:優先級+功能碼+DA+SA)。

數據包如下:包括幀ID、配置位、數據

		TxBuf.TxCANID.Bits.ID = ((uint32)0x0C << 24) + ((uint32)0xE200 << 8) + ((uint16)0x50 << 8) + 0x5f;
		TxBuf.TxFrameInfo.Bits.RTR = 0; //0數據幀、1遠程幀        			
		TxBuf.TxFrameInfo.Bits.FF  = 1; //0標准幀、1擴展幀    				
		TxBuf.TxFrameInfo.Bits.DLC = 8; //發送數據字節數
		TxBuf.TDA.Bits.Data1 = 0x01 ;         			
		TxBuf.TDA.Bits.Data2 = State ;
		TxBuf.TDA.Bits.Data3 = State >> 8;
		TxBuf.TDA.Bits.Data4 = State >> 16;
		TxBuf.TDB.Bits.Data1 = State >> 24;
		TxBuf.TDB.Bits.Data2 = 0;
		TxBuf.TDB.Bits.Data3 = 0;
		TxBuf.TDB.Bits.Data4 = 0;
		CAN2Tx_OSQPostFront(CAN2Send, (void *)&TxBuf);

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、什么是存儲器映射?
給存儲器分配地址的過程叫存儲器映射,再分配一個地址叫重
映射。

FAT32、exFAT、NTFS之間的區別

FAT32:相比以前的技術,可以減少磁盤的浪費,提高磁盤利用率。
exFAT:支持存儲單個超過4G的文件。可以視為FAT32的升級。
NTFS:多見於硬盤。可以說NTFS是目前最好的磁盤文件系統。

但NTFS要經常讀寫存儲介質,所以理論上NTFS格式的U盤比較容易損壞。
並且由於U盤帶寬有限,NTFS頻繁讀寫占據通道會讓磁盤性能降低。

PS:
硬盤默認使用NTFS,也可格式化為exFAT;
U盤、TF卡、SD卡等閃存推薦使用exFAT;
windows XP 不能用 exFAT的U盤,除非打個補丁 WindowsXP-KB955704-x86-CHS(exfat補丁);
mac電腦不能用NTFS U盤;
switch使用 TF卡、SD卡、U盤、移動硬盤或者機械硬盤需要格式化為exFAT。

SD、TF卡速度等級

在這里插入圖片描述
還有最新速度等級:A1、A2,約為10MB/S。
A1、A2速度也不算最快,但它強調的是頻繁讀寫的穩定性,並且該標准的TF卡可當安卓手機內部空間使用。總之,穩定。


TCP/IP協議棧

在這里插入圖片描述


UART -- FIFO緩沖區:

FIFO是先進先出緩沖區的意思,即串口接收到的數據可以先進入FIFO,不必馬上進入中斷服務程序接收,這樣可節省CPU時間。對於發送數據也一樣,可以把要發送的數據一起寫入FIFO,串口控制器可按寫入順序依次發送出去。

只要開啟了uart的FIFO功能,uart收到數據就會進入FIFO緩沖區。
如果不用FIFO或者緩沖區長度只有1,那么意味着uart每接收一個字節就要進一次中斷,這樣頻繁進中斷會占用CPU資源。
使用FIFO可以在連續接收若干個數據后才產生一次中斷,然后一起進行處理,避免頻繁進入中斷。
而如果接收的數據沒有達到FIFO的緩沖長度怎么辦?超時中斷,即在一定時間內沒有接收到數據會進入接收中斷,可以利用這個中斷把不足FIFO長度的數據最后都讀取完。

所以說使用FIFO好處是:
1)避免頻繁進中斷,提高吞吐率
2)避免數據因沒有及時處理而丟失。
不好的地方是:
實時性受影響。比如接收到一個數據后要立刻反應,這種情況FIFO不適合。


領航者ZYNQ開發板:

接口資源特別豐富,核心板與接口板獨立設計:
在這里插入圖片描述
在這里插入圖片描述


POSIX

POSIX:可移植操作系統接口(Portable Operating System Interface of UNIX,縮寫為 POSIX )

為一個POSIX兼容的操作系統編寫的程序,應該可以在任何其它的POSIX操作系統(即使是來自另一個廠商)上編譯執行。

簡單總結:

完成同一功能,不同內核提供的系統調用(也就是一個函數)是不同的,例如創建進程,linux下是fork函數,windows下是creatprocess函數。好,我現在在linux下寫一個程序,用到fork函數,那么這個程序該怎么往windows上移植?我需要把源代碼里的fork通通改成creatprocess,然后重新編譯...

Posix標准的出現就是為了解決這個問題。linux和windows都要實現基本的posix標准,linux把fork函數封裝成posix_fork(隨便說的),windows把creatprocess函數也封裝成posix_fork,都聲明在unistd.h里。這樣,程序員編寫普通應用時候,只用包含unistd.h,調用posix_fork函數,程序就在源代碼級別可移植了。

POSIX標准的文件接口有:close、creat、open、read、sync、write、dup、dup2、flock、fcntl、fsync、lseek、mkstemp等。

CDT

C/C++Development Tools,eclipse插件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM