合宙ESP32C3 更换Flash调整lua固件教程分享
- 📌合宙官方的固件编译指南:
https://wiki.luatos.com/develop/compile/ESP32C3.html
- 🎈合宙给出的更换flash的文档说明:
https://wiki.luatos.com/chips/esp32c3/change_flash.html?highlight=flash
- 合宙ESP32C3原理图:
https://cdn.openluat-luatcommunity.openluat.com/attachment/CORE-ESP32-C3%E8%AE%BE%E8%AE%A1%E5%8E%9F%E7%90%86%E5%9B%BE_V1.2.pdf
- ✨我主要来补充一下在成功编译之路上的坑坑洼洼,官方的教程有讲的就一比带过,或划重点说明。
- 🎉根据原理图来看,如果追求更快的spi flash 访问速度,可以将2线的DIO flash模式改为4线的QIO模式,需要占用GPIO12 GPIO13引脚,断开板子上的D4、D5上的led引脚。
- 🌿原DIO连线方式:
- 🌿QIO连线方式:
📓更换Flash调整固件步骤
-
将ESP32C3项目clone到与LuatOS主仓库的同级目录。
-
更新分区表文件:
partitions.csv
默认项目下面有3个分区表配置文件,分别是默认的4MB,另外的8MB、16MB。根据个人更换flash大小,选择对应的分区表文件。8MB和16MB的分区表文件改成默认的原来4MB的分区表文件名
partitions.csv
我这里将16MB的改成默认的partitions.csv
文件后的内容是这样的。你不需要修改文件内容,安装官方给出的教程是:只需将原来的默认的4MB的partitions.csv
文件移走或删除,然后根据自己实际更换的flash容量重命名对应的容量分区表名字即可。实际上是需要安装原来4MB的分区表配置文件来调整现有的8MB或16MB的分区表配置文件的。
16MB
修改分区表配置前的内容:
- 修改后的
16MB
的分区表内容:
- 如果不按照上面的分区表修改,将会导致最后生成的Soc文件无法上传
Lua
脚本。
-
修改
Soc_tools
文件夹下的json
文件内容
-
打开ESP-IDF命令提示符窗口
-
通过菜单命令定位到项目文件夹;
cd C:\Users\Administrator\Desktop\Luat_project\LuatOS-ESP32
-
设置esp32型号:
idf.py set-target esp32c3
-
调用
idf.py menuconfig
修改flash配置文件信息
-
通过键盘方向键移到“
Serial flasher config
”回车进入
-
移动到
flash size
选项,根据自己更换的flash大小选择8MB或者16MB
-
然后按
s
进行保存,弹出的对话框回车确认
-
按
Q
键退出设置窗口,回到命令提示符窗口
- 接下来执行
idf.py build
编译项目
由于编译实在太长了,我就不在这里重复演示放图了。
- 编译完成的信息如下:
打包生成Soc
文件
- 继续接着上面编译完成的命令提示符窗口,输入
cd tools
,定位到C:\Users\Administrator\Desktop\Luat_project\LuatOS-ESP32\tools
这个文件夹下
- 执行"pip install -r .\requirements.txt
"命令:用来安装所需打打包插件。
- 打包生成
Soc
烧录文件程序“python .\esp32v3.py -t esp32c3 -p
”命令
到这里已经大功告成!
⛳分享16MB的打包好的Soc文件
包含2个:一个是标准版的,一个带USB调试输出的
链接:https://pan.baidu.com/s/1n5nQnhcnsyP00fk-j3vFXg
提取码:prr8
⛳合宙ESP32C3开发板注意事项
- 🌿外置的SPI flash是采用2线 DIO模式的,在开发使用时,注意这一点。在基于Arduino开发环境下使用,需要将flash模式设置为DIO模式,否则烧录后无限重启,在基于VSCode Platform IO环境下开发选择
airm2m_core_esp32c3
型号,或者自定义个开发板类型的json文件到固件目录下,也可以在现有的C3型号的.json文件中修改对应的C3 flash模式。 - 🔖VSCode Platform IO环境下路径:
C:\Users\Administrator\.platformio\platforms\espressif32\boards
📝使用Arduino IDE烧录程序测试
- 🛠参数设置:
void setup() {
Serial.begin(115200);
Serial.println("Hello ESP32C3!!");
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(12, HIGH);
digitalWrite(13, LOW);
delay(1000);
digitalWrite(13, HIGH);
digitalWrite(12, LOW);
delay(1000);
Serial.printf("getChipRevision= %s \n",ESP.getChipModel()); //ESP32-C3
Serial.printf("getChipCores= %d Core\n",ESP.getChipCores()); // 1
Serial.printf("getCpuFreqMHz= %d MHz\n",ESP.getCpuFreqMHz()); //160
Serial.printf("getSketchSize= %d bytes\n",ESP.getSketchSize());//246144 bytes
Serial.printf("getFreeSketchSpace= %d bytes\n",ESP.getFreeSketchSpace());
uint32_t flash_Size = ESP.getFlashChipSize();
Serial.printf("getFlashChipSize= %d \n",flash_Size); //16777216
Serial.printf("getFlashChipSpeed= %d \n",ESP.getFlashChipSpeed());//80000000
FlashMode_t flash_Mode = ESP.getFlashChipMode();
Serial.printf("Flash mode: %s\n", (flash_Mode == FM_QIO ? "QIO" : flash_Mode == FM_QOUT ? "QOUT" : flash_Mode == FM_DIO ? "DIO" : flash_Mode == FM_DOUT ? "DOUT" : "UNKNOWN"));
delay(1000);
}
- 🧾串口打印