From 11dccf25819df861226fd68ff4bd521444991c04 Mon Sep 17 00:00:00 2001 From: guozhanxin Date: Wed, 31 Aug 2022 13:50:00 +0800 Subject: [PATCH] [ESP32-C3]add English README.md. --- bsp/ESP32_C3/README.md | 96 +++++++++++++----------------- bsp/ESP32_C3/README_ZH.md | 102 ++++++++++++++++++++++++++++++++ bsp/ESP32_C3/images/burn_en.png | Bin 0 -> 19933 bytes 3 files changed, 144 insertions(+), 54 deletions(-) create mode 100644 bsp/ESP32_C3/README_ZH.md create mode 100644 bsp/ESP32_C3/images/burn_en.png diff --git a/bsp/ESP32_C3/README.md b/bsp/ESP32_C3/README.md index 491f0befe4..1911009d6f 100644 --- a/bsp/ESP32_C3/README.md +++ b/bsp/ESP32_C3/README.md @@ -1,20 +1,17 @@ +# ESP32-C3 BSP Introduction -# ESP32-C3 BSP 说明 +[中文](README_ZH.md) | English -## 简介 +This document records the execution instruction of the BSP (board support package) for the [ESP32-C3](http://luatos.com/t/esp32c3) development board. -本文档为基于RT-THREAD的乐鑫ESP32-C3的[ESP32C3](http://luatos.com/t/esp32c3) BSP (板级支持包) 说明。 +The document is covered in two parts: -主要内容如下: +- Board Resources Introduction +- Quickly Get Started -- 开发板资源介绍 -- BSP 快速上手 +## Resources Introduction -通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。 - -## 开发板介绍 - -目前测试了两款开发板,运行都正常,由于两款开发板LED小灯引脚不同,请在menuconfig中选择自己手上的开发板。已测开发板外观如下图所示: +We tested 2 development boards, it all works, but due to the different LED pins of the two development boards, so we'll need to select the corresponding development board in the menuconfig. - [LUATOS_ESP32C3](https://wiki.luatos.com/chips/esp32c3/board.html) @@ -24,41 +21,37 @@ ![hongxu](images/hx_shang.png) +The mainly-used resources of LUATOS_ESP32C3 are shown as follows: +- MCU: [esp32-c3](https://www.espressif.com/sites/default/files/documentation/esp32-c3_datasheet_en.pdf),Main Frequency 160MHz, 407.22 CoreMark; 2.55 CoreMark/MHz +- Built-in Chip: 384KB ROM, 400KB SRAM +- Peripherals + - Red LED: 2, LED: D4 (IO12), D5(IO13) + - Button: 2, K1(BOOT) K2(RST) + - SPI FLASH: 4M +- Common-used interfaces: USB, UART, etc. -该LUATOS_ESP32C3开发板常用 **板载资源** 如下: +### For more details about this board, please refer to [Here](https://wiki.luatos.com/chips/esp32c3/board.html). -- MCU:[esp32-c3](https://www.espressif.com/sites/default/files/documentation/esp32-c3_datasheet_en.pdf),主频 160MHz, 407.22 CoreMark; 2.55 CoreMark/MHz -- 芯片内置:384KB ROM, 400KB SRAM, -- 常用外设 - - 红色LED:2个,LED: D4 (IO12), D5(IO13) - - 按键:2个,K1(BOOT) K2(RST) - - SPI FLASH: 4M -- 常用接口:USB UART等 +## **Peripheral Condition** -开发板更多详细信息请参考 [ESP32-C3开发板介绍](https://wiki.luatos.com/chips/esp32c3/board.html)。 +Each peripheral supporting condition for this BSP is as follows: -## 外设支持 +| **On-board Peripherals** | ****Support**** | ****Remark**** | +| ------------------------ | --------------- | ------------------------------------------------------------ | +| GPIO | Support | | +| UART | Support | Using LUATOS_ESP32C3 development board requires connecting serial port to USB chip UART0_TX and UART0_RX (such as CP2102) | +| JTAG debug | Support | ESP32C3 usb-linked development boards can be debugged | -本 BSP 目前对外设的支持情况如下: +## Quickly Get Started -| **片上外设** | **支持情况** | **备注** | -| :----------------- | :----------: | :------------------------------------- | -| GPIO | 支持 | | -| UART | 支持 | 使用LUATOS_ESP32C3开发板需要在UART0_TX和UART0_RX连接串口转USB芯片(如CP2102)| -| JTAG调试 | 支持 | ESP32C3采用USB方式和PC链接的开发板可以调试 | +First of all, we'll need to build the IDE, Espressif officially recommends the IDF. +When installing the IDF, please select version 4.4. If you are familiar with the official IDF command line, you can also use the command line to perform the `idf.py build` directly in the `bsp/esp32_c3`, which has been tested and proved that it's functional -## 使用说明 +### ESP-IDF Adds RT-Thread patch -### 快速上手 - -先要搭建IDE开发环境,乐鑫官方推荐使用IDF开发,这边建议使用vscode插件。 - -IDF的搭建方法有很多种,尝试了很多种方法之后,总结了一个比较好用的方法,并且可以使用vscode跨平台安装,非常简单方便,具体方法见链接[ESP-IDF 一键式搭建环境基于VSCODE](https://blog.csdn.net/lt6210925/article/details/123699249)。 安装的时候IDF版本请选择IDF 4.4版本。如果你对官方IDF命令行的方式熟悉的话,你也可以使用命令行的方式,直接在`bsp/esp32_c3`中执行`idf.py build`即可,这边已经测试过,是可以使用的。 - -### ESP-IDF 添加RT-THREAD patch - -由于IDF使用的是FREERTOS,如果需要使用rt-thread就需要修改一些文件。将`rtt.patch` 这个文件拷贝到IDF的代码目录下面,然后在`git bash`命令行内执行命令下面几条命令就可以打上patch +The IDF was running the FreeRTOS, so we'll need a few modifications to get to RT-Thread. +Copy the `rtt.patch` file to the IDF code directory, and then execute the next few commands on the `git bash` command line to mark the patch. ``` cd esp/esp-idf @@ -66,35 +59,30 @@ git checkout v4.4 git am rtt.patch ``` -如果不想用patch文件,已经将代码上传到github上面,可以进入[tangzz98/esp-idf](https://github.com/tangzz98/esp-idf/tree/freertos_wrapper) 下载最新的freertos_wrapper分支代码即可。修改之后的IDF,原来的IDF的example还是正常使用,互不干扰,可以放心使用。 +If you don't want to use the patch file and have uploaded the code to GitHub, you can now go to [tangzz98/esp-idf](tangzz98/esp-idf) to download the latest `freertos_wrapper` branch code. After the modification, the original IDF example is still kept in normal use, they won't interfere with each other. -#### 编译下载 +#### Compile and Download - 在`bsp/ESP32_C3`中右击,然后使用vscode打开工程 +Right-click `bsp/ESP32_C3` and use vscode to open the project -编译选择最下面的按钮即可: +Compile and select the button at the bottom: ![build](images/build.png) -这边通常采用串口下载,需要根据你自己开发板选择对应的串口(如果有JTAG的,也可以用JTAG下载和调试) +Here we usually use the serial port to download, you need to choose the corresponding serial port according to your own development board (if there is JTAG, you can also use JTAG to download and debug) -![burn](images/burn.png) +![](images/burn.png) -#### 运行结果 +Once the project is successfully downloaded, the system runs automatically, the red LED will blink in 1s on cycles. -下载程序成功之后,系统会运行,红色的 LED灯以 1S 周期闪烁。 -感兴趣的可以通过公众号`Thomas的小火车`来联系 +## Notes -## 注意事项 +- The basic functions are now supported, but it needs more, welcome any contributions and feedback. -- 目前RTTHREAD支持起来了,后续会需要继续完善一些其他功能,刚开始使用ESP32,欢迎小伙伴一起来讨论和贡献。 -## 联系人信息 +Maintainer: -维护人: +- [supperthomas](https://github.com/supperthomas) email address: [78900636@qq.com](mailto:78900636@qq.com) -- [supperthomas](https://github.com/supperthomas) 邮箱:<78900636@qq.com> +Special thanks to [chenyingchun0312](https://github.com/chenyingchun0312) for providing support on the RISC-V part working. -## 特别感谢 - -- 感谢[chenyingchun0312](https://github.com/chenyingchun0312) 提供了RISCV的强力支持 diff --git a/bsp/ESP32_C3/README_ZH.md b/bsp/ESP32_C3/README_ZH.md new file mode 100644 index 0000000000..41a693a2fd --- /dev/null +++ b/bsp/ESP32_C3/README_ZH.md @@ -0,0 +1,102 @@ + +# ESP32-C3 BSP 说明 + +中文 | [English](README.md) + +## 简介 + +本文档为基于RT-THREAD的乐鑫ESP32-C3的[ESP32C3](http://luatos.com/t/esp32c3) BSP (板级支持包) 说明。 + +主要内容如下: + +- 开发板资源介绍 +- BSP 快速上手 + +通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。 + +## 开发板介绍 + +目前测试了两款开发板,运行都正常,由于两款开发板LED小灯引脚不同,请在menuconfig中选择自己手上的开发板。已测开发板外观如下图所示: + +- [LUATOS_ESP32C3](https://wiki.luatos.com/chips/esp32c3/board.html) + +![LUATOS_ESP32C3](images/luatos_esp32c3.png) + +- [HX-DK-商](https://docs.wireless-tech.cn/doc/7/) + +![hongxu](images/hx_shang.png) + + + +该LUATOS_ESP32C3开发板常用 **板载资源** 如下: + +- MCU:[esp32-c3](https://www.espressif.com/sites/default/files/documentation/esp32-c3_datasheet_en.pdf),主频 160MHz, 407.22 CoreMark; 2.55 CoreMark/MHz +- 芯片内置:384KB ROM, 400KB SRAM, +- 常用外设 + - 红色LED:2个,LED: D4 (IO12), D5(IO13) + - 按键:2个,K1(BOOT) K2(RST) + - SPI FLASH: 4M +- 常用接口:USB UART等 + +开发板更多详细信息请参考 [ESP32-C3开发板介绍](https://wiki.luatos.com/chips/esp32c3/board.html)。 + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **片上外设** | **支持情况** | **备注** | +| :----------------- | :----------: | :------------------------------------- | +| GPIO | 支持 | | +| UART | 支持 | 使用LUATOS_ESP32C3开发板需要在UART0_TX和UART0_RX连接串口转USB芯片(如CP2102)| +| JTAG调试 | 支持 | ESP32C3采用USB方式和PC链接的开发板可以调试 | + +## 使用说明 + +### 快速上手 + +先要搭建IDE开发环境,乐鑫官方推荐使用IDF开发,这边建议使用vscode插件。 + +IDF的搭建方法有很多种,尝试了很多种方法之后,总结了一个比较好用的方法,并且可以使用vscode跨平台安装,非常简单方便,具体方法见链接[ESP-IDF 一键式搭建环境基于VSCODE](https://blog.csdn.net/lt6210925/article/details/123699249)。 安装的时候IDF版本请选择IDF 4.4版本。如果你对官方IDF命令行的方式熟悉的话,你也可以使用命令行的方式,直接在`bsp/esp32_c3`中执行`idf.py build`即可,这边已经测试过,是可以使用的。 + +### ESP-IDF 添加RT-THREAD patch + +由于IDF使用的是FREERTOS,如果需要使用rt-thread就需要修改一些文件。将`rtt.patch` 这个文件拷贝到IDF的代码目录下面,然后在`git bash`命令行内执行命令下面几条命令就可以打上patch + +``` +cd esp/esp-idf +git checkout v4.4 +git am rtt.patch +``` + +如果不想用patch文件,已经将代码上传到github上面,可以进入[tangzz98/esp-idf](https://github.com/tangzz98/esp-idf/tree/freertos_wrapper) 下载最新的freertos_wrapper分支代码即可。修改之后的IDF,原来的IDF的example还是正常使用,互不干扰,可以放心使用。 + +#### 编译下载 + + 在`bsp/ESP32_C3`中右击,然后使用vscode打开工程 + +编译选择最下面的按钮即可: + +![build](images/build.png) + +这边通常采用串口下载,需要根据你自己开发板选择对应的串口(如果有JTAG的,也可以用JTAG下载和调试) + +![burn](images/burn.png) + +#### 运行结果 + +下载程序成功之后,系统会运行,红色的 LED灯以 1S 周期闪烁。 +感兴趣的可以通过公众号`Thomas的小火车`来联系 + +## 注意事项 + +- 目前RTTHREAD支持起来了,后续会需要继续完善一些其他功能,刚开始使用ESP32,欢迎小伙伴一起来讨论和贡献。 + +## 联系人信息 + +维护人: + +- [supperthomas](https://github.com/supperthomas) 邮箱:<78900636@qq.com> + +## 特别感谢 + +- 感谢[chenyingchun0312](https://github.com/chenyingchun0312) 提供了RISCV的强力支持 diff --git a/bsp/ESP32_C3/images/burn_en.png b/bsp/ESP32_C3/images/burn_en.png new file mode 100644 index 0000000000000000000000000000000000000000..3f8b7187dca6657f37da253a33c5c17e17162b94 GIT binary patch literal 19933 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 gOl)Ji|D)*t0kn3y?pi)Xy#N3J07*qoM6N<$f