chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

深入剖析esp32c3的系統(tǒng)底層啟動(dòng)

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

掃碼添加小助手

加入工程師交流群

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

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

8266C366

cpuXtensaRISCV

時(shí)鐘頻率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

藍(lán)牙N/ABluetooth LE v5.0

SRAM160 KB400KB

ROM0384KB

RTC ROM1KB8KB

簡單對(duì)比一下,不難發(fā)現(xiàn)esp32的還是與8266有點(diǎn)類似,而從目前的信息來看,esp32c3芯片的定價(jià)也是基本上和8266差不多的。

玩esp32c3,除了可以學(xué)習(xí)riscv架構(gòu),也能夠?qū)Φ讓酉到y(tǒng)的嵌入式編程有著更加深刻的理解。

3.esp32c3系統(tǒng)啟動(dòng)流程如果按照樂鑫ESP-IDF正常的啟動(dòng)流程來看,啟動(dòng)過程有三個(gè)階段

bootloader第一階段

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

SOC上電后,直接執(zhí)行復(fù)位向量代碼,通過檢測GPIO_STRAP_REG的寄存器的狀態(tài)來確定啟動(dòng)模式。

一般來說,有三種啟動(dòng)模式:

reset from deep sleep

這種啟動(dòng)模式就是系統(tǒng)從深度睡眠中被喚醒。

power up

上電啟動(dòng)

看門狗復(fù)位

bootloader第二階段

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

主程序啟動(dòng)

第二階段啟動(dòng)后,加載主程序并且運(yùn)行自己的程序的業(yè)務(wù)邏輯。主要的流程就是首先初始化C語言的執(zhí)行環(huán)境,設(shè)置棧指針地址,運(yùn)行FreeRTOS操作系統(tǒng),然后運(yùn)行main任務(wù)線程,執(zhí)行app_main。用戶自己在app_main中編寫自己的邏輯。

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

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

要寫裸機(jī)代碼,首先需要看懂技術(shù)手冊,在芯片Boot控制的這一章節(jié),有描述ESP32C3的啟動(dòng)一共有三個(gè)Strapping管腳GPIO2,GPIO8,GPIO9。

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

啟動(dòng)模式GPIO2GPIO8GPIO9

SPI Boot 模式1x1

Download Boot模式110

對(duì)于SPI模式,又分為兩種方式:

常規(guī)flash啟動(dòng)

這種模式支持安全啟動(dòng),程序直接在RAM中。

直接啟動(dòng)方式

不支持安全啟動(dòng),程序直接運(yùn)行在flash中,默認(rèn)使用這種方式時(shí),需要將程序的bin文件的前兩個(gè)字節(jié)(地址:0x42000000)為0xaebd041d。

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

而本文的實(shí)驗(yàn)過程采用的是直接啟動(dòng)方式。

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

對(duì)于數(shù)據(jù)的布局如下

程序的鏈接腳本可設(shè)置如下:

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

}

因?yàn)樯婕暗綌?shù)據(jù)段和代碼段的地址分離問題,當(dāng)程序編譯成一整個(gè)固件的時(shí)候,在flash中的存在形式就是一個(gè)elf格式的文件,通過內(nèi)存的加載,將代碼段,數(shù)據(jù)段分別放到IRAM和DRAM中,同時(shí)將棧指針地址,數(shù)據(jù)段,bss段指向ram中。這樣就完成了裸機(jī)程序的布局。

接下來要開始構(gòu)建裸機(jī)工程了。

5.esp32c3裸機(jī)工程的構(gòu)建在自行構(gòu)建裸機(jī)工程的時(shí)候,也參考一些國外工程師的一些代碼,最后結(jié)合自己的理解,通過meson+ninja構(gòu)建出屬于自己的esp32c3裸機(jī)代碼實(shí)驗(yàn)平臺(tái)。

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

首先本文的環(huán)境只在Linux上環(huán)境下做編譯,并在windows平臺(tái)上下載程序。整個(gè)平臺(tái)后期會(huì)完全在windows上進(jìn)行開發(fā)。

1.從github上下載代碼

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

該工程項(xiàng)目主要用于研究esp32c3裸機(jī)實(shí)驗(yàn)平臺(tái)。

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

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

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

下載對(duì)應(yīng)版本的riscv最新的交叉編譯工具鏈即可。

3.設(shè)置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裸機(jī)代碼下載與運(yùn)行首先需要下載python3??梢栽趙indows系統(tǒng)上進(jìn)行操作。

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

下載完成后,esp32c3通過串口調(diào)試助手連接到電腦。

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

通過下面的命令燒錄并啟動(dòng)串口

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

python -m serial.tools.miniterm COM4 115200

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

ctrl + ]

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

7.分析裸機(jī)驅(qū)動(dòng)程序的編寫編寫裸機(jī)程序,在對(duì)于esp32c3的編程模型中,可以使用ROM的里面的程序進(jìn)行設(shè)計(jì)。

其原理就是ROM中運(yùn)行程序,每個(gè)函數(shù)都有特定的地址,只需要知道ROM函數(shù)對(duì)應(yīng)的地址,就可以通過訪問地址,從而訪問函數(shù)。

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

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

其中定義了一些rom函數(shù)的地址,比如通過串口發(fā)送一個(gè)字節(jié)

uart_tx_one_char = 0x40000068;

其頭文件

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

函數(shù)的定義

/**

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

*

* @param None

*

* @return OK.

*/

STATUS uart_tx_one_char(uint8_t TxChar);

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

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

比如在定時(shí)器組(TIMG)的章節(jié)

在寄存器的控制寄存器,首先TIMG_T0_EN設(shè)置為1的時(shí)候,使能計(jì)數(shù)器。

對(duì)于ESP32C3的編程,首先配置一下寄存器,使能定時(shí)器。

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

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

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

8.總結(jié)esp32c3裸機(jī)編程,可以清楚的理解esp32的底層啟動(dòng)過程,完全當(dāng)作單片機(jī)來使用。

關(guān)于wifi和藍(lán)牙部分,使用rom中提供的函數(shù)地址,通過鏈接腳本和頭文件的方式進(jìn)行函數(shù)調(diào)用,這樣非常方便,而大部分驅(qū)動(dòng)編程則需要自己查詢datasheet,操作外設(shè)對(duì)應(yīng)的寄存器進(jìn)行訪問。

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6071

    文章

    45254

    瀏覽量

    659958
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5493

    瀏覽量

    127712
  • 藍(lán)牙
    +關(guān)注

    關(guān)注

    116

    文章

    6164

    瀏覽量

    176442
  • 物聯(lián)網(wǎng)
    +關(guān)注

    關(guān)注

    2938

    文章

    46912

    瀏覽量

    402334
  • ESP
    ESP
    +關(guān)注

    關(guān)注

    0

    文章

    193

    瀏覽量

    35796

原文標(biāo)題:esp32c3的系統(tǒng)底層啟動(dòng)分析

文章出處:【微信號(hào):Embeded_IoT,微信公眾號(hào):嵌入式IoT】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    ESP32-S3的MicroPython開發(fā)環(huán)境搭建

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

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

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

    ESP32-C3開發(fā)板全面支持小智AI!燒錄實(shí)戰(zhàn)指南來了!

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

    基于ESP32C3的智能小車設(shè)計(jì)

    你有沒有想過,從零開始親手制作一輛堅(jiān)固耐用的遙控越野車?今天,小編就帶你走進(jìn)一個(gè)融合機(jī)械、電子與物聯(lián)網(wǎng)的精彩DIY項(xiàng)目——一款由 Seeed Studio XIAO ESP32C3 強(qiáng)力驅(qū)動(dòng)的 3D打印4x4 RC漫游車!
    的頭像 發(fā)表于 06-04 11:11 ?1473次閱讀
    基于<b class='flag-5'>ESP32C3</b>的智能小車設(shè)計(jì)

    樂鑫ESP32-C5全面進(jìn)入量產(chǎn)

    樂鑫信息科技 (688018.SH) 宣布,ESP32-C5 現(xiàn)已全面進(jìn)入量產(chǎn)。
    的頭像 發(fā)表于 05-06 16:50 ?883次閱讀

    樂鑫ESP32-C5全面進(jìn)入量產(chǎn)!啟明云端樂鑫科技代理商

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

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

    ESP32-C61在繼承ESP32-C2和ESP32-C3成功經(jīng)驗(yàn)的基礎(chǔ)上,顯著優(yōu)化了外設(shè)、強(qiáng)化了連接性能,并擴(kuò)展了存儲(chǔ)選項(xiàng),將為用戶設(shè)備帶來更出色的物聯(lián)網(wǎng)性能,滿
    的頭像 發(fā)表于 04-22 18:00 ?834次閱讀
    Wi-Fi 6超值暢享|樂鑫<b class='flag-5'>ESP32-C</b>61 SoC,啟明云端樂鑫科技代理商

    esp32如何接入豆包

    要在 ESP32 上接入豆包工具,本質(zhì)上是讓 ESP32 設(shè)備與豆包的 API 進(jìn)行通信,以獲取相關(guān)服務(wù)
    的頭像 發(fā)表于 02-05 13:40 ?2519次閱讀
    <b class='flag-5'>esp32</b>如何接入豆包

    領(lǐng)略ESP32芯片的科技魅力:C6與S3

    作者:Lashley Wang 物聯(lián)網(wǎng)時(shí)代,ESP32 系列芯片大放異彩!想深入了解它們的獨(dú)特魅力嗎?本期將為你詳細(xì)解讀ESP32-C6和ESP32-S3這兩款芯片的特性與優(yōu)勢。更有精
    的頭像 發(fā)表于 01-26 17:48 ?3272次閱讀
    領(lǐng)略<b class='flag-5'>ESP32</b>芯片的科技魅力:<b class='flag-5'>C</b>6與S<b class='flag-5'>3</b>

    原來ESP32竟可《一“芯”兩用》既做人體檢測傳感器也做Wi-Fi數(shù)據(jù)傳輸

    如何使用ESP32來做人體檢測傳感器,對(duì)我來說還是挺新鮮的事兒,對(duì)你來說是否有也一樣呢?接下來我會(huì)重點(diǎn)來展開說說如何通過ESP32來實(shí)現(xiàn),這里我用的的是ESP32C3模組;0、前言之前看過樂鑫
    的頭像 發(fā)表于 12-18 18:12 ?4911次閱讀
    原來<b class='flag-5'>ESP32</b>竟可《一“芯”兩用》既做人體檢測傳感器也做Wi-Fi數(shù)據(jù)傳輸

    ESP32-S3-WROOM-1/ESP32-S3-WROOM-1U技術(shù)規(guī)格書

    電子發(fā)燒友網(wǎng)站提供《ESP32-S3-WROOM-1/ESP32-S3-WROOM-1U技術(shù)規(guī)格書.pdf》資料免費(fèi)下載
    發(fā)表于 12-07 15:30 ?11次下載

    【AI技術(shù)支持】ESP32-C3芯片/模組SPI-AT問題處理

    描述在使用ESP32-C3芯片/模組,AT版本為Release/v3.0.0.0時(shí),客戶在使用常規(guī)AT通信時(shí),速率達(dá)不到需求,需要換成SPI-AT,測試中遇到問題,這是為什么呢?啟明云端/02
    的頭像 發(fā)表于 11-27 01:00 ?2567次閱讀
    【AI技術(shù)支持】<b class='flag-5'>ESP32-C3</b>芯片/模組SPI-AT問題處理

    【AI技術(shù)支持】ESP32-C3-Lyra播放音頻無法控制音量及異聲問題處理

    【AI技術(shù)支持】ESP32-C3-Lyra播放音頻無法控制音量及異聲問題處理
    的頭像 發(fā)表于 11-22 01:01 ?2148次閱讀
    【AI技術(shù)支持】<b class='flag-5'>ESP32-C3</b>-Lyra播放音頻無法控制音量及異聲問題處理

    基于ESP32-C3FN4為核心自主研發(fā)的Wi-Fi+BT模塊-RF-WM-ESP32B1

    WI-FI模組 - RF-WM-ESP32B1是基于ESP32-C3FN4為核心自主研發(fā)的Wi-Fi+BT模塊,支持IEEE 802.11b/g/n (2.4 GHz Wi-Fi)和低功耗藍(lán)牙5.0,可廣泛用于各種消費(fèi)類電子、手機(jī)外設(shè)產(chǎn)品等。
    的頭像 發(fā)表于 11-07 09:45 ?914次閱讀
    基于<b class='flag-5'>ESP32-C3</b>FN4為核心自主研發(fā)的Wi-Fi+BT模塊-RF-WM-<b class='flag-5'>ESP32</b>B1

    【AI技術(shù)支持】ESP32C3 開發(fā)板在Linux環(huán)境下,進(jìn)行JTAG 調(diào)試演示

    啟明云端/01JTAG調(diào)試工具本教程主要演示ESP32C3開發(fā)板在linux環(huán)境下,通過vscode的ESP-IDF插件使用JTAG調(diào)試工具。ESP32C3不但內(nèi)置了USB-JTAG,還內(nèi)置了
    的頭像 發(fā)表于 10-17 08:01 ?4036次閱讀
    【AI技術(shù)支持】<b class='flag-5'>ESP32C3</b> 開發(fā)板在Linux環(huán)境下,進(jìn)行JTAG 調(diào)試演示