少年聽雨歌樓上,紅燭昏羅帳。壯年聽雨客舟中,江闊云低,斷雁叫西風(fēng)。而今聽雨僧廬下,鬢已星星也。悲歡離合總無情,一任階前,點(diǎn)滴到天明。
虞美人.聽雨(宋.蔣捷)
在寫之前突然下雨了,不自覺的就想起這個(gè)詩(shī)。
平時(shí)去淘寶買ESP32的開發(fā)板,20出頭大概率是這個(gè)板子,那我們這篇就來完完整整的將芯片進(jìn)行挖掘,解決我們的引腳配置,硬件設(shè)置等等相關(guān)的問題,以后不再糾纏相關(guān)的問題.
板子的外部是這樣
背部是這樣
Chip is ESP32D0WDQ6 (revision (unknown 0xa))
Features: WiFi, BT, Dual Core, VRef calibration in efuse
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 921600
Changed.
Configuring flash size...
Auto-detected Flash size: 4MB
使用Arduino燒錄時(shí),出現(xiàn)真實(shí)的芯片信息
以及由一個(gè)4MB的flash
https://www.mouser.cn/ProductDetail/Espressif-Systems/ESP32-D0WDQ6?qs=chTDxNqvsykWgzfXx0gR%252bQ%3D%3D
在網(wǎng)站上面找到的裝配圖
https://www.mouser.com/PCN/Espressif_Systems_PCN_02_20180515_ESP32_Datasheet_Update.pdf
芯片前期可以直接看這個(gè)技術(shù)規(guī)格書,畫紅線的就是
內(nèi)部的系統(tǒng)框圖
值得一提的是,有ULP的處理器
畫框的就是我們的芯片的參數(shù)
最后這里也是同理
內(nèi)部芯片的引腳圖
這些資源是最寶貴的,再貼一下
具體芯片就告一段落,我們接下來看模組:
esp-wroom-32
就是我圖中畫的這個(gè),這個(gè)是將芯片啟動(dòng)必要的原件封裝在一起
接下來看的資料是這個(gè)
可以看到WIFI+藍(lán)牙+BLE,然后芯片類型也對(duì)的上
一些外設(shè)的性能
這個(gè)是我們?nèi)P文章關(guān)注的要點(diǎn),因?yàn)榍度胧介_發(fā)的第一關(guān)就是找對(duì)引腳
一共38個(gè)引腳,上圖是管腳定義
注意這句話,連SPI芯片了
更多的細(xì)節(jié)要去這里找到答案
先放一個(gè)SPI的flash芯片的原理圖
然后一個(gè)具體的原理圖也有,有需要的自己看文檔
這個(gè)很貼心啊,就是芯片引腳和真實(shí)的引出腳之間的映射關(guān)系
模組的外圍原理圖
模組尺寸
接下來的這些話里面全是要考的,全記住
記住這些參數(shù),后面我要深入研究
這個(gè)是片上的存儲(chǔ)器
片外就是要通過外界的IO相連
最大支持到16MB,而且片上的存儲(chǔ)器可以做片外的緩存,加快速度
這個(gè)是地址圖,完全是對(duì)稱的
地址的映射結(jié)構(gòu)
emmmm,我不認(rèn)識(shí)
指令總線
數(shù)據(jù)和指令公用
地址 0x4000_0000 以下的部分屬于數(shù)據(jù)總線的地址范圍,地址 0x4000_0000 ~ 0x4FFF_FFFF 部分為指令總線 的地址范圍,地址 0x5000_0000 及以上的部分是數(shù)據(jù)總線與指令總線共用的地址范圍。
CPU 的數(shù)據(jù)總線與指令總線都為小端序。即字節(jié)地址 0x0、0x1、0x2、0x3 訪問的字節(jié)分別是 0x0 訪問的 32-bit 字中的最低、次低、次高、最高字節(jié)。
CPU 可以通過數(shù)據(jù)總線按照字節(jié)、半字、字進(jìn)行對(duì)齊與非對(duì)齊的 數(shù)據(jù)訪問。CPU 可以通過指令總線進(jìn)行數(shù)據(jù)訪問,但必須是字對(duì)齊方式;非對(duì)齊數(shù)據(jù)訪問會(huì)導(dǎo)致 CPU 工作異 常。
地址映射
具有DMA的模塊
兩個(gè)CPU,各有32KB的緩存來訪問外部存儲(chǔ)器
在讀寫外設(shè)的時(shí)候有速度的差異
怎么解決,可以看這個(gè)文檔
可以看到解決辦法,清晰明了
中斷矩陣的結(jié)構(gòu)圖
ESP32 總共有 71 個(gè)外部中斷源。ESP32 中的 71 個(gè)外部中斷源中有 67 個(gè)可以 分配給兩個(gè) CPU。
其余的 4 個(gè)外部中斷源只能分配給特定的 CPU,每個(gè) CPU 2 個(gè)。GPIO_INTERRUPT_PRO 和 GPIO_INTERRUPT_PRO_NMI 只可以分配給 PRO_CPU。
GPIO_INTERRUPT_APP 和 GPIO_INTERRUPT_APP_NMI 只可以分配給 APP_CPU。
因此,PRO_CPU 與 APP_CPU 各可以分配到 69 個(gè)外 部中斷源。
兩個(gè) CPU(PRO_CPU 和 APP_CPU)各有 32 個(gè)中斷。
其中 26 個(gè)為外部中斷。以上列出了每個(gè) CPU 所有的 中斷。
系統(tǒng)提供三種級(jí)別的復(fù)位
系統(tǒng)時(shí)鐘
有三種時(shí)鐘源
IO,RTC-IO,GPIO交換矩陣結(jié)構(gòu)框圖
IO Pad供電,上面的引腳映射實(shí)在看不懂了
具體說明顏色在這里
VDD_SDIO電源域 可以拉電流和灌電流,因此 VDD_SDIO 電源域可由外部或內(nèi)部供電。若使用外部供電,必須使用和
VDD3P3_RTC 相同的電源。
如果外部不供電,則內(nèi)部線性穩(wěn)壓器會(huì)給 VDD_SDIO 供電。VDD_SDIO 電壓可以為 1.8V 或與 VDD3P3_RTC 一 致,這取決于 MTDI pad 在復(fù)位時(shí)的狀態(tài)——高電平時(shí)為 1.8V,低電平時(shí)為與 VDD3P3_RTC 一致。
eFuse bit 置上后可強(qiáng)制決定 VDD_SDIO 的默認(rèn)電壓。此外,軟件啟動(dòng)后軟件還可以配置寄存器來強(qiáng)制改變 VDD_SDIO 的 電壓。
天天DMA,DMA,到底是個(gè)啥嘛。
直接存儲(chǔ)訪問 (Direct Memory Access, DMA) 用于在外設(shè)與存儲(chǔ)器之間以及存儲(chǔ)器與存儲(chǔ)器之間提供高速數(shù)據(jù)傳輸。可以在無需任何 CPU 操作的情況下通過 DMA 快速移動(dòng)數(shù)據(jù),從而提高了 CPU 的效率。
ESP32 中有 13 個(gè)外設(shè)都具有 DMA 功能,這 13 個(gè)外設(shè)是:UART0、UART1、UART2、SPI1、SPI2、SPI3、 I2S0、I2S1、SDIO slave、SD/MMC host、EMAC、BT 和 Wi-Fi。
就是外設(shè)需要數(shù)據(jù)交換的時(shí)候,不經(jīng)過中間人CPU的手
DMA的引擎構(gòu)架
DMA 引擎通過 AHB_BUS 將數(shù)據(jù)存入內(nèi)部 RAM 或者將數(shù)據(jù)從 RAM 取出。其 中 RAM 為 ESP32 的內(nèi)部 SRAM,軟件可以通過掛載鏈表的方式來使用 DMA 引擎。DMA_ENGING 根據(jù) out_link 中的內(nèi)容將相應(yīng) RAM 中的數(shù)據(jù)發(fā)送出去,也可根據(jù) in_link 中的內(nèi)容將接收的數(shù)據(jù)存入指定 RAM 地址空間。
鏈表結(jié)構(gòu)圖
out_link和in_link的結(jié)構(gòu)式一樣的。一個(gè)鏈表式由三個(gè)字構(gòu)成
三個(gè)字段的意義是
用 DMA 接收數(shù)據(jù)時(shí), 如果一幀數(shù)據(jù)長(zhǎng)度小于給定的 buffer 長(zhǎng)度,那么 DMA 不會(huì)接著使用這個(gè) buffer 剩余空間。
這使得 DMA_ENGING 可以用于傳輸任意字節(jié)數(shù)的數(shù)據(jù)。
UDMA
SPI DMA
最后是I2S DMA 使用時(shí)的流程
關(guān)于SPI的內(nèi)容就寫這點(diǎn),后面再寫詳細(xì)的
這個(gè)圖是4線制的雙工,半雙工連接
并行QSPI的接口
并行QSPI的通信模式
ESP32 SPI 中斷分為兩類,一類為 SPI 接口中斷,另一類為 SPI DMA 接口中斷。
ESP32 SPI 將發(fā)送和/或接收兩種操作結(jié)束時(shí)的中斷統(tǒng)一成一個(gè),即認(rèn)為同是控制器一次操作的結(jié)束,而不加以區(qū)分。ESP32 SPI 作為從機(jī)時(shí),根據(jù)操作的不同,從機(jī)會(huì)產(chǎn)生讀/寫狀態(tài)寄存器和讀/寫緩存數(shù)據(jù)中斷。
我中間跳了兩個(gè)外設(shè),因?yàn)橛玫纳?。之后如果要用再研?/p>
說下MAC的接口,就是芯片可以接一個(gè)網(wǎng)線
官方的文檔有很多的特性說明,我對(duì)這塊不熟悉
就截取一點(diǎn),你看接口和速度
這是它的功能框圖,剩下的內(nèi)容看了看又是知識(shí)盲區(qū)
重點(diǎn)說說I2C的功能,現(xiàn)在傳感器拿出來不是I2C的就是SPI的。
I2C 是一個(gè)兩線總線,由 SDA 線和 SCL 線構(gòu)成。這些線設(shè)置為漏極開漏輸出。因此,I2C 總線上可以掛載多個(gè)外設(shè),通常是和一個(gè)或多個(gè)主機(jī)以及一個(gè)或多個(gè)從機(jī)。主機(jī)通過總線訪問從機(jī)。主機(jī)發(fā)出開始信號(hào),則通訊開始:在 SCL 為高電平時(shí)拉低 SDA 線,主機(jī)將通過 SCL 線發(fā)出 9 個(gè)時(shí)鐘脈沖。
前 8 個(gè)脈沖用于按位傳輸,該字節(jié)包括 7-bit 地址和 1 個(gè)讀寫位。如果從機(jī)地址與該 7-bit 地址一致,那么從機(jī)可 以通過在第 9 個(gè)脈沖上拉低 SDA 線來應(yīng)答。接下來,根據(jù)讀/寫標(biāo)志位,主機(jī)和從機(jī)可以發(fā)送/接收更多的數(shù)據(jù)。
根據(jù)應(yīng)答位的邏輯電平?jīng)Q定是否停止發(fā)送數(shù)據(jù)。在數(shù)據(jù)傳輸中,SDA 線僅在 SCL 線為低電平時(shí)才發(fā)生變化。當(dāng) 主機(jī)完成通訊,回發(fā)送一個(gè)停止標(biāo)志:在 SCL 為高電平時(shí),拉高 SDA 線。ESP32 I2C 控制器可以處理 I2C 協(xié)議,騰出處理器核用于其它任務(wù)。
主機(jī)架構(gòu)
從機(jī)架構(gòu)
I2C 控制器可以工作于 Master 模式或者 Slave 模式,
I2C_MS_MODE 寄存器用于模式選擇。
總線時(shí)序圖
可以的控制單元:
· RAM:大小為 32 x 8 bit,直接映射到 CPU 內(nèi)核的地址上,首地址為 (REG_I2C_BASE+0x100),I2C 數(shù)據(jù) 的每一個(gè)字節(jié)占據(jù)一個(gè) word 的存儲(chǔ)地址(因此,首字節(jié)在 +0x100, 第二字節(jié)在 +0x104, 第三字節(jié)在 +0x108,以此類推)。用戶需要置位 I2C_NONFIFO_EN 寄存器。
· 16 個(gè)命令寄存器 (cmd0 ~ cmd15) 以及一個(gè) CMD_Controller:用于 I2C Master 控制數(shù)據(jù)傳輸過程。I2C 控制器每次執(zhí)行一個(gè)命令。
· SCL_FSM:用于控制 SCL 時(shí)鐘,I2C_SCL_HIGH_PERIOD_REG 以及 I2C_SCL_LOW_PERIOD_REG 寄存 器用于配置 SCL 的頻率和占空比。
· SDA_FSM:用于控制 SDA 數(shù)據(jù)線。
· DATA_Shifter:用于將字節(jié)數(shù)據(jù)轉(zhuǎn)化成比特流或者將比特流轉(zhuǎn)化成字節(jié)數(shù)據(jù)。I2C_RX_LSB_FIRST 和I2C_TX_LSB_FIRST 用于配置最高有效位或最低有效位的優(yōu)先儲(chǔ)存或傳輸。
· SCL_Filter 以及 SDA_Filter:用于 I2C_Slave 濾除輸入噪聲。通過配置 I2C_SCL_FILTER_EN 以及 I2C_SDA_FILTER_EN 寄存器可以開啟或關(guān)閉濾波器。濾波器可以濾除脈寬低于I2C_SCL_FILTER_THRES 以及 I2C_SDA_FILTER_THRES 的毛刺。
串口架構(gòu)圖
特性
UART 是一種以字符為導(dǎo)向的通用數(shù)據(jù)鏈,可以實(shí)現(xiàn)設(shè)備間的通信。異步傳輸?shù)囊馑际遣恍枰诎l(fā)送數(shù)據(jù)上添 加時(shí)鐘信息。這也要求發(fā)送端和接收端的速率、停止位、奇偶校驗(yàn)位等都要相同,通信才能成功。
一個(gè)典型的 UART 幀開始于一個(gè)起始位,緊接著是有效數(shù)據(jù),然后是奇偶校驗(yàn)位(可有可無),最后是停止位。ESP32 上的 UART 控制器支持多種字符長(zhǎng)度和停止位。另外,控制器還支持軟硬件流控和 DMA,可以實(shí)現(xiàn)無縫高速的數(shù)據(jù)傳輸。
我們這里就是簡(jiǎn)單的介紹一下
這里再講LEDC外設(shè),ESP32芯片-LEDC外設(shè)(另附Arduino代碼),如果覺得這里淺嘗輒止,可以看我前幾日寫的這個(gè)文章。
架構(gòu)圖
我在想16個(gè)通道,就是16個(gè)引腳嗎?
高速通道框圖
分頻器
常用的頻率和精度
相關(guān)中斷
外設(shè)還有很多,但是我不想逐條看了。挑感興趣的看看
ESP32支持電容傳感器和霍爾傳感器
豐富的特性,看的我就想做炸彈
一共10個(gè)管腳支持
內(nèi)部結(jié)構(gòu)
什么原理:
觸摸管腳的電容會(huì)進(jìn)行周期性充放電。” 觸摸管腳的內(nèi)部電壓” 代表充/放電電壓在參考高值 (drefH) 與參考低值 (drefL) 之間的變化。在每次變化中,觸摸傳感器將生成一個(gè)輸出脈沖 (OUT)。由于觸摸管腳受到觸碰(高電容) 與未受到觸碰(低電容)時(shí)的電壓變化速率不同,可以通過統(tǒng)計(jì)同一時(shí)間間隔內(nèi)出現(xiàn)的輸出脈沖數(shù)量,判斷觸摸管腳是否受到觸碰??梢酝ㄟ^ TIE_OPT 設(shè)置開始充/放電的初始電壓電平。
可視化的工作流程
FSM的內(nèi)部結(jié)構(gòu),就是有限狀態(tài)機(jī)的內(nèi)部
霍爾傳感器結(jié)構(gòu)
根據(jù)霍爾效應(yīng),當(dāng)電流垂直于磁場(chǎng)通過N 型半導(dǎo)體時(shí),會(huì)在垂直于電流和磁場(chǎng)的方向產(chǎn)生附加電場(chǎng),從而在半 導(dǎo)體兩端形成電勢(shì)差,具體高低與電磁場(chǎng)的強(qiáng)度和電流大小有關(guān)。
當(dāng)恒定電流穿過磁場(chǎng)或電流存在于恒定磁場(chǎng)時(shí),霍爾效應(yīng)傳感器可用于測(cè)量磁場(chǎng)強(qiáng)度?;魻杺鞲衅鞯膽?yīng)用場(chǎng)合非常廣泛,包括接近探測(cè)、定位、測(cè)速與電流檢測(cè)等。ESP32中的霍爾傳感器經(jīng)過專門設(shè)計(jì),可向 SAR ADC 提供電壓信號(hào),實(shí)現(xiàn)磁場(chǎng)傳感功能。在需要低電壓的工作模式下,該傳感器可由 ULP 協(xié)處理器控制。在此類功能的支持下,ESP32 具備的處理能力和靈活性均使其在位置傳感、接近檢測(cè)及測(cè)速等應(yīng)用場(chǎng)景下成為一種極具吸引力的解決方案。
但是它自帶得這個(gè)ADC,一言難盡
一些英文縮寫,看寄存器表得時(shí)候有用
談?wù)勎覍?duì)樂鑫的看法,首先就是夸贊,很了不起的公司,完美的找到了自己的市場(chǎng),其次就是40nm這個(gè)制程,美國(guó)還真的不打壓。
樂鑫的資料可能不是最完美的,但它一定是修bug最勤勞的,而且最最最好的一點(diǎn)就是它的開源做法,幾乎開源了一切,除了敏感的協(xié)議棧。所以學(xué)習(xí)或者開發(fā)都很方便的找到參考資料。
在Github上面搜索ESP32,你可以看到它開源項(xiàng)目的豐富程度
問你哪家MCU場(chǎng)子能有這種盛況
官網(wǎng)這些資源一鍵直達(dá),好像最近換前端了
做的美觀了一些
包括給出的一些解決方案,都很有趣
特別是資料的豐富程度,幾乎擁有一切
https://www.espressif.com/zh-hans/support/download/all?keys=&&&page=2
自家的IDF幾乎不停的修bug加功能
10多塊錢就可以擁有雙核,WiFi+藍(lán)牙+USB OTG加等等的外設(shè)。這個(gè)話聽起來就想做夢(mèng)一樣,但是樂鑫做到的。而且?guī)缀跬昝?,也正是如此,俘獲了國(guó)內(nèi)外大量用戶的?。當(dāng)然它可能也沒有那么完美,可能它的ADC精度不高,IO少等等。。。但是它在變好,它在路上。而且有點(diǎn)不務(wù)正業(yè),在8266的身上它從來都不是一個(gè)主機(jī),而是通過AT固件使用串口與傳統(tǒng)單片機(jī)相連擴(kuò)展起通信能力。只不過后面被“玩”壞了。
特別是Arduino開發(fā)模式的加入,降低了開發(fā)的門檻。大批的老師,學(xué)生,愛好者蜂擁而來。
國(guó)內(nèi)領(lǐng)先的K12編程平臺(tái),里面的硬件實(shí)體就有很多的ESP32開發(fā)板
本身不錯(cuò)的硬件性能+多樣的開發(fā)方式+豐富的資料+眾多的開源庫(kù)+相對(duì)低廉的售價(jià)+良好的供貨+對(duì)市場(chǎng)的足夠重視。我實(shí)在想不通都這樣了,還不火,真的是天理難容嗷。
本身我是大疆的粉絲,就說一下我知道的ESP芯片的用處。
大疆其實(shí)是個(gè)對(duì)技術(shù)方案的使用很隨心所欲的公式
這個(gè)TT是大疆首次擁抱開源推出的無人機(jī),外置的大腦就是ESP32的一款單核芯片,至于更多的內(nèi)容,看我以前的文章Dji TT無人機(jī)擴(kuò)展件ESP32芯片(D2WDQ5)
https://www.dji.com/cn/robomaster-tt/downloads
https://terra-1-g.djicdn.com/851d20f7b9f64838a34cd02351370894/RM-TT/RoboMaster%20TT%20Arduino%20IDE%20%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E.pdf
直到今日我都驚嘆于這個(gè)設(shè)計(jì)的精妙之處
通過這樣的方式擴(kuò)展了無人機(jī)的能力
眾所周知我有一個(gè)云臺(tái)相機(jī),一代的無線傳輸能力就是一個(gè)無線底座實(shí)現(xiàn)的
大疆Dji pocket 一代研究(Dji Mimo),可以看我寫的文章
長(zhǎng)這樣
底座,當(dāng)時(shí)我看出來是ESP32的應(yīng)用都驚呆了!還可以這樣?
沒錯(cuò),就是這么騷,大疆的無線方案而已~
我感覺就是應(yīng)用舉例里面的視頻流傳輸吧
這篇文章太長(zhǎng)了,不知道有多少朋友可以看到這里,其實(shí)我想說為什么要看數(shù)據(jù)手冊(cè)。我覺得你能把數(shù)據(jù)手冊(cè)里面的知識(shí),每個(gè)名詞搞明白,就會(huì)成為所謂的大佬。很多的數(shù)據(jù)手冊(cè),寫的東西比教科書都好。而且你能看懂ESP32的手冊(cè),使用別的也是易如反掌,因?yàn)橥粋€(gè)地球,做出的東西都差不多~
聯(lián)系客服