伦伦影院久久影视,天天操天天干天天射,ririsao久久精品一区 ,一本大道香蕉大久在红桃,999久久久免费精品国产色夜,色悠悠久久综合88,亚洲国产精品久久无套麻豆,亚洲香蕉毛片久久网站,一本一道久久综合狠狠老

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

深入剖析esp32c3的系統底層啟動

嵌入式IoT ? 來源:嵌入式IoT ? 作者:bigmagic ? 2021-07-06 10:38 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1.本文概述對于esp32的玩法,基本上定位都是做上層應用,樂鑫官方提供的ESP-IDF物聯網開發框架已經十分的完善,做上層應用按照這套框架進行開發,完全不必了解底層的實現細節。作為一個深入研究riscv底層的愛好者來說,跳過ESP-IDF框架,直接像使用單片機一樣去使用ESP32C3更加有意思。本文的目的就是理解ESP32C3的裸機開發流程,像玩單片機一樣去使用這個riscv的mcu

2.esp32c3分析對于esp32c3玩法,從玩家來看可能更加類似ESP8266,相比8266,可以做如下表格對比:

8266C366

cpuXtensaRISCV

時鐘頻率160MHz160MHz

WIFIIEEE 802.11 b/g/n;2.4GHz;HT20;up to 75 MbpsIEEE 802.11 b/g/n;2.4GHz;HT20;up to 150 Mbps

藍牙N/ABluetooth LE v5.0

SRAM160 KB400KB

ROM0384KB

RTC ROM1KB8KB

簡單對比一下,不難發現esp32的還是與8266有點類似,而從目前的信息來看,esp32c3芯片的定價也是基本上和8266差不多的。

玩esp32c3,除了可以學習riscv架構,也能夠對底層系統的嵌入式編程有著更加深刻的理解。

3.esp32c3系統啟動流程如果按照樂鑫ESP-IDF正常的啟動流程來看,啟動過程有三個階段

bootloader第一階段

該階段主要是上電后,從ROM中運行,并且將bootloader第二階段程序從flash的0x0地址偏移處搬運到RAM中。

SOC上電后,直接執行復位向量代碼,通過檢測GPIO_STRAP_REG的寄存器的狀態來確定啟動模式。

一般來說,有三種啟動模式:

reset from deep sleep

這種啟動模式就是系統從深度睡眠中被喚醒。

power up

上電啟動

看門狗復位

bootloader第二階段

該程序開始存放在flash的0x0地址處,其中的作用是從flash中加載分區表,并且決定啟動的程序位置,對于OTA來說非常有用處。而且也有一些flash程序的解壓或者壓縮的代碼,安全啟動,以及 over-the-air updates(OTA)等等。然后將程序的數據段放到DROM,指令段放到DRAM中。

主程序啟動

第二階段啟動后,加載主程序并且運行自己的程序的業務邏輯。主要的流程就是首先初始化C語言的執行環境,設置棧指針地址,運行FreeRTOS操作系統,然后運行main任務線程,執行app_main。用戶自己在app_main中編寫自己的邏輯。

4.分析esp32c3上的裸機程序目的是讓esp32c3上電后直接啟動我們自己編寫的裸機程序,那么首先ROM中的程序是不能改變的。

https://www.espressif.com/sites/default/files/documentation/esp32-c3_technical_reference_manual_cn.pdf

要寫裸機代碼,首先需要看懂技術手冊,在芯片Boot控制的這一章節,有描述ESP32C3的啟動一共有三個Strapping管腳GPIO2,GPIO8,GPIO9。

通過這個三個引腳的組合,可以控制boot模式。

啟動模式GPIO2GPIO8GPIO9

SPI Boot 模式1x1

Download Boot模式110

對于SPI模式,又分為兩種方式:

常規flash啟動

這種模式支持安全啟動,程序直接在RAM中。

直接啟動方式

不支持安全啟動,程序直接運行在flash中,默認使用這種方式時,需要將程序的bin文件的前兩個字節(地址:0x42000000)為0xaebd041d。

而對于Download Boot模式,可以將UART0或者USB下載代碼到flash中或者SRAM中,這樣可以直接在SRAM中運行。

而本文的實驗過程采用的是直接啟動方式。

在編寫裸機代碼之前,首先來看一下memory map。

對于數據的布局如下

程序的鏈接腳本可設置如下:

MEMORY

{

irom (x): org = 0x42000000, len = 0x400000

drom (r): org = 0x3C000000, len = 0x400000

ram (rw): org = 0x3FC80000, len = 0x50000

rtc_ram (rx): org = 0x50000000, len = 0x2000

}

因為涉及到數據段和代碼段的地址分離問題,當程序編譯成一整個固件的時候,在flash中的存在形式就是一個elf格式的文件,通過內存的加載,將代碼段,數據段分別放到IRAM和DRAM中,同時將棧指針地址,數據段,bss段指向ram中。這樣就完成了裸機程序的布局。

接下來要開始構建裸機工程了。

5.esp32c3裸機工程的構建在自行構建裸機工程的時候,也參考一些國外工程師的一些代碼,最后結合自己的理解,通過meson+ninja構建出屬于自己的esp32c3裸機代碼實驗平臺。

為什么不用cmake或者makefile,原因是makefile的跨平臺效率不是很好,而且語法比較復雜,而cmake也比較慢,所以想到以后可能會到windows上開發,換一種高效簡單的工程構建方式比較,就采用meson+ninja build。關于構建語法規則這里不做贅述。只介紹工程如何使用。

首先本文的環境只在Linux上環境下做編譯,并在windows平臺上下載程序。整個平臺后期會完全在windows上進行開發。

1.從github上下載代碼

git clone git@github.com:bigmagic123/esp32c3_bare_metal.git

該工程項目主要用于研究esp32c3裸機實驗平臺。

2.下載riscv交叉編譯工具鏈

首先需要下載教程編譯工具鏈。

https://github.com/xpack-dev-tools/riscv-none-embed-gcc-xpack/releases/tag/v10.1.0-1.1/

下載對應版本的riscv最新的交叉編譯工具鏈即可。

3.設置gcc路徑

直接修改esp32c3_bare_metal/example/cross.txt中的路徑即可。

4c66a4ba-ddc8-11eb-9e57-12bb97331649.png

替換自己的編譯路徑即可。

4.編譯程序

meson setup _build --cross-file cross.txt

cd _build

ninja

6.esp32c3裸機代碼下載與運行首先需要下載python3。可以在windows系統上進行操作。

安裝好后,可以輸入pip install esptool。

下載完成后,esp32c3通過串口調試助手連接到電腦

下載完成,可以通過esptool探測芯片ID。

通過下面的命令燒錄并啟動串口

esptool.py --port COM4 --baud 921600 write_flash 0x0000 demo.bin

python -m serial.tools.miniterm COM4 115200

如果退出,可以輸出下面的命令

ctrl + ]

這樣就可以將程序燒錄到flash中了。

7.分析裸機驅動程序的編寫編寫裸機程序,在對于esp32c3的編程模型中,可以使用ROM的里面的程序進行設計。

其原理就是ROM中運行程序,每個函數都有特定的地址,只需要知道ROM函數對應的地址,就可以通過訪問地址,從而訪問函數。

在[esp-idf](https://github.com/espressif/esp-idf)。

components/esp_rom/esp32c3/ld/esp32c3.rom.ld

其中定義了一些rom函數的地址,比如通過串口發送一個字節

uart_tx_one_char = 0x40000068;

其頭文件

components/esp_rom/include/esp32c3/rom/uart.h

函數的定義

/**

* @brief Output a char to printf channel, wait until fifo not full.

*

* @param None

*

* @return OK.

*/

STATUS uart_tx_one_char(uint8_t TxChar);

另外,也以通過編程手冊進行操作寄存器的編程,這種難度稍微大一些。

https://www.espressif.com/sites/default/files/documentation/esp32-c3_technical_reference_manual_cn.pdf

比如在定時器組(TIMG)的章節

在寄存器的控制寄存器,首先TIMG_T0_EN設置為1的時候,使能計數器。

對于ESP32C3的編程,首先配置一下寄存器,使能定時器。

然后可以通過UPDATE寄存器更新寄存器的值。

當使能定時器時,其值不斷在增加/減少。每次需要讀取數據的時候,需要將上述的31位寫0或者1,才能去讀T0LO寄存器。

其定時器的值為54位。這樣就可以正常通過寄存器操作esp32c3定時器了。

8.總結esp32c3裸機編程,可以清楚的理解esp32的底層啟動過程,完全當作單片機來使用。

關于wifi和藍牙部分,使用rom中提供的函數地址,通過鏈接腳本和頭文件的方式進行函數調用,這樣非常方便,而大部分驅動編程則需要自己查詢datasheet,操作外設對應的寄存器進行訪問。

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6078

    文章

    45533

    瀏覽量

    672252
  • 寄存器
    +關注

    關注

    31

    文章

    5612

    瀏覽量

    130234
  • 藍牙
    +關注

    關注

    119

    文章

    6351

    瀏覽量

    179051
  • 物聯網
    +關注

    關注

    2948

    文章

    47960

    瀏覽量

    416798
  • ESP
    ESP
    +關注

    關注

    0

    文章

    197

    瀏覽量

    36618

原文標題:esp32c3的系統底層啟動分析

文章出處:【微信號:Embeded_IoT,微信公眾號:嵌入式IoT】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    ESP32-C3-MINI-1 使用uart0可進入下載模式,但無法下載

    燒錄工具:ESP32C3 FLASH DOWNLOAD TOOL V3.9.9_R2 我使用ESP32-C3-DevKitM-1開發版下載程序,使用上面自帶的下載接口是沒有問題的。 隨后我切換
    發表于 03-23 13:52

    ESP32 Wi-Fi 控制 LED 燈的原理

    控制LED燈的——從底層硬件連接,到網絡通信邏輯,一步步拆解整個過程。一、系統概覽ESP32是一顆集成度極高的芯片,內置Wi-Fi、藍牙、雙核MCU和豐富的外設接
    的頭像 發表于 01-09 19:04 ?436次閱讀
    <b class='flag-5'>ESP32</b> Wi-Fi 控制 LED 燈的原理

    VSCode + ESP-IDF環境下給ESP32-S3項目添加頭文件

    VSCode + ESP-IDF環境下給ESP32-S3項目添加頭文件
    的頭像 發表于 11-28 07:27 ?2714次閱讀

    ESP32-C3 mqtt操作實踐

    。 cp -r $IDF_PATH/examples/protocols . 接著找到mqtt/tcp的例子。 cd protocols/mqtt/tcp 設置相關的編譯目標為esp32c3。 idf.py
    發表于 10-31 06:52

    樂鑫ESP32-C6和ESP32-C61究竟該如何選擇?一文讀懂本質區別

    樂鑫科技推出的ESP32-C6和ESP32-C61均支持Wi-Fi6,但定位不同。ESP32-C6是多協議樞紐,集成Wi-Fi6、藍牙5、Zigbee和Thread,適合智能家居網關和Matter
    的頭像 發表于 10-28 14:17 ?2280次閱讀
    樂鑫<b class='flag-5'>ESP32-C</b>6和<b class='flag-5'>ESP32-C</b>61究竟該如何選擇?一文讀懂本質區別

    ESP32-C3賦能物聯網設備,開啟產品智能化,樂鑫代理商飛睿科技

    ESP32-C3是樂鑫科技推出的高性能物聯網芯片,搭載RISC-V單核處理器,支持Wi-Fi/藍牙5(LE)雙模連接。該芯片具有多層安全防護機制(安全啟動、Flash加密等)和超低功耗特性(深度睡眠
    的頭像 發表于 10-27 10:53 ?907次閱讀
    <b class='flag-5'>ESP32-C3</b>賦能物聯網設備,開啟產品智能化,樂鑫代理商飛睿科技

    ESP32-C3賦能物聯網設備,開啟產品智能化,樂鑫代理商飛睿科技

    ESP32-C3是樂鑫科技推出的高性能物聯網芯片,搭載RISC-V單核處理器,支持Wi-Fi/藍牙5(LE)雙模連接。該芯片具有多層安全防護機制(安全啟動、Flash加密等)和超低功耗特性(深度睡眠
    的頭像 發表于 10-27 10:46 ?685次閱讀

    ESP32與DM9051ANX開發版引腳接法說明

    ESP32 C3使用SPI網口芯片DM9051ANX時,以此硬件引腳接法作為參考,使項目目發展行順利。
    的頭像 發表于 10-01 10:35 ?947次閱讀
    <b class='flag-5'>ESP32</b>與DM9051ANX開發版引腳接法說明

    ESP32-S3的MicroPython開發環境搭建

    本文通過搭建Thonny IDE開發環境,了解了如何給ESP32-S3燒錄MircoPython固件和MircoPython應用程序。
    的頭像 發表于 09-11 16:02 ?1811次閱讀
    <b class='flag-5'>ESP32-S3</b>的MicroPython開發環境搭建

    專為 ESP32-P4C5 核心板打造的高效開發利器

    SDK+詳盡文檔,新手秒上手,高手效率翻倍!雙芯片設計,釋放澎湃性能ESP32-P4C5核心板采用樂鑫科技的ESP32-P4+ESP32-C5雙芯架構!·ESP32-P
    的頭像 發表于 08-11 18:19 ?1272次閱讀
    專為 <b class='flag-5'>ESP32-P4C</b>5 核心板打造的高效開發利器

    ESP32-C3開發板全面支持小智AI!燒錄實戰指南來了!

    本文將詳細解析基于樂鑫ESP32-C3芯片的ZXAIEC43開發板燒錄“小智”AI語音系統的全流程。該方案代碼完全開源,支持深度定制開發,適用于智能玩具、潮玩手辦及智能家居控制等多元場景。開發環境搭建1.
    的頭像 發表于 06-13 18:01 ?6034次閱讀
    <b class='flag-5'>ESP32-C3</b>開發板全面支持小智AI!燒錄實戰指南來了!

    基于ESP32C3的智能小車設計

    你有沒有想過,從零開始親手制作一輛堅固耐用的遙控越野車?今天,小編就帶你走進一個融合機械、電子與物聯網的精彩DIY項目——一款由 Seeed Studio XIAO ESP32C3 強力驅動的 3D打印4x4 RC漫游車!
    的頭像 發表于 06-04 11:11 ?2656次閱讀
    基于<b class='flag-5'>ESP32C3</b>的智能小車設計

    樂鑫ESP32-C5全面進入量產

    樂鑫信息科技 (688018.SH) 宣布,ESP32-C5 現已全面進入量產。
    的頭像 發表于 05-06 16:50 ?1518次閱讀

    樂鑫ESP32-C5全面進入量產!啟明云端樂鑫科技代理商

    樂鑫信息科技(688018.SH)宣布,ESP32-C5現已全面進入量產。作為行業首款2.4&5GHz雙頻Wi-Fi6的RISC-VSoC,ESP32-C5同時集成Bluetooth5(LE
    的頭像 發表于 04-30 18:10 ?1390次閱讀
    樂鑫<b class='flag-5'>ESP32-C</b>5全面進入量產!啟明云端樂鑫科技代理商

    Wi-Fi 6超值暢享|樂鑫ESP32-C61 SoC,啟明云端樂鑫科技代理商

    ESP32-C61在繼承ESP32-C2和ESP32-C3成功經驗的基礎上,顯著優化了外設、強化了連接性能,并擴展了存儲選項,將為用戶設備帶來更出色的物聯網性能,滿
    的頭像 發表于 04-22 18:00 ?1719次閱讀
    Wi-Fi 6超值暢享|樂鑫<b class='flag-5'>ESP32-C</b>61 SoC,啟明云端樂鑫科技代理商