Skip to content

Commit 3b5b585

Browse files
C3
1 parent b8ff931 commit 3b5b585

File tree

6 files changed

+67
-17
lines changed

6 files changed

+67
-17
lines changed

BK7231Flasher/BK7231Flasher.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,7 @@
216216
<EmbeddedResource Include="Floaders\LN88xx_RamCode.bin" />
217217
<EmbeddedResource Include="Floaders\ESP32_Stub.json" />
218218
<EmbeddedResource Include="Floaders\ESP32S3_Stub.json" />
219+
<EmbeddedResource Include="Floaders\ESP32C3_Stub.json" />
219220
<EmbeddedResource Include="Floaders\ESP8266_Stub.json" />
220221
<None Include="packages.config" />
221222
<None Include="Properties\Settings.settings">

BK7231Flasher/CommandLineRunner.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,8 @@ static bool UsesSectorIndex(BKType chipType)
407407
case BKType.RTL8721DA:
408408
case BKType.RTL8720E:
409409
case BKType.ESP32:
410+
case BKType.ESP32C3:
411+
case BKType.ESP32S3:
410412
case BKType.ESP8266:
411413
case BKType.LN882H:
412414
case BKType.LN8825:
@@ -609,6 +611,8 @@ static BaseFlasher CreateFlasher(BKType chipType, CancellationToken ct)
609611
case BKType.RDA5981:
610612
return new RDAFlasher(ct);
611613
case BKType.ESP32:
614+
case BKType.ESP32C3:
615+
case BKType.ESP32S3:
612616
case BKType.ESP8266:
613617
return new ESPFlasher(ct);
614618
default:

BK7231Flasher/Flashers/BaseFlasher.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public enum BKType
3737
GenericSPI,
3838
ESP32,
3939
ESP32S3,
40+
ESP32C3,
4041
ESP8266,
4142

4243
Detect,

BK7231Flasher/Flashers/ESPFlasher.cs

Lines changed: 51 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public enum ESPCommand : byte
4444
bool isStub = false;
4545
bool isESP8266 = false;
4646
bool isESP32S3 = false;
47+
bool isESP32C3 = false;
4748
string detectedChip = "ESP";
4849
byte[] _slipBuf = new byte[4096];
4950
public bool LegacyMode { get; set; } = false;
@@ -291,7 +292,7 @@ uint RunSpiFlashCmd(byte cmd, int readBits = 0)
291292
mosiDlenOffs = 0; // not used for ESP8266
292293
misoDlenOffs = 0; // not used for ESP8266
293294
}
294-
else if (isESP32S3)
295+
else if (isESP32S3 || isESP32C3)
295296
{
296297
baseAddr = ESP32S3_SPI_REG_BASE;
297298
w0Offs = ESP32S3_SPI_W0_OFFS;
@@ -480,7 +481,7 @@ public bool UploadStub()
480481
try
481482
{
482483
// Load chip-specific stub from embedded resource
483-
string stubName = isESP8266 ? "ESP8266_Stub" : isESP32S3 ? "ESP32S3_Stub" : "ESP32_Stub";
484+
string stubName = isESP8266 ? "ESP8266_Stub" : isESP32S3 ? "ESP32S3_Stub" : isESP32C3 ? "ESP32C3_Stub" : "ESP32_Stub";
484485
string jsonContent = FLoaders.GetStringFromAssembly(stubName);
485486
addLogLine($"Loaded stub: {stubName}");
486487

@@ -914,7 +915,22 @@ public string ReadMac()
914915
mac = new byte[] { oui0, oui1, oui2,
915916
(byte)((mac1 >> 8) & 0xFF), (byte)(mac1 & 0xFF), (byte)((mac0 >> 24) & 0xFF) };
916917
}
917-
else if (isESP32S3)
918+
else if (isESP32C3)
919+
{
920+
// ESP32-C3: EFUSE_BASE=0x60008800, MAC_EFUSE_REG=EFUSE_BASE+0x044
921+
uint mac0 = ReadReg(0x60008844);
922+
uint mac1 = ReadReg(0x60008848);
923+
924+
// esptool: struct.pack(">II", mac1, mac0)[2:] → 6 bytes big-endian
925+
mac = new byte[6];
926+
mac[0] = (byte)((mac1 >> 8) & 0xFF);
927+
mac[1] = (byte)((mac1 >> 0) & 0xFF);
928+
mac[2] = (byte)((mac0 >> 24) & 0xFF);
929+
mac[3] = (byte)((mac0 >> 16) & 0xFF);
930+
mac[4] = (byte)((mac0 >> 8) & 0xFF);
931+
mac[5] = (byte)((mac0 >> 0) & 0xFF);
932+
}
933+
else if (isESP32S3)
918934
{
919935
// ESP32-S3: EFUSE_BASE=0x60007000, MAC_EFUSE_REG=EFUSE_BASE+0x044
920936
uint mac0 = ReadReg(0x60007044);
@@ -975,25 +991,43 @@ public bool Connect()
975991

976992
if (Sync())
977993
{
978-
// Detect chip type from magic register / security info
994+
// Always use user-selected chipType for flags
995+
switch (chipType)
996+
{
997+
case BKType.ESP32C3:
998+
detectedChip = "ESP32-C3";
999+
isESP32C3 = true;
1000+
break;
1001+
case BKType.ESP32S3:
1002+
detectedChip = "ESP32-S3";
1003+
isESP32S3 = true;
1004+
break;
1005+
case BKType.ESP8266:
1006+
detectedChip = "ESP8266";
1007+
isESP8266 = true;
1008+
break;
1009+
case BKType.ESP32:
1010+
detectedChip = "ESP32";
1011+
break;
1012+
default:
1013+
detectedChip = chipType.ToString();
1014+
break;
1015+
}
1016+
1017+
// Try auto-detect and warn if it disagrees with user selection
9791018
uint? chipMagic = GetChipId();
9801019
if (chipMagic.HasValue)
9811020
{
982-
// Check if this is a chip ID from GET_SECURITY_INFO (small values)
1021+
string autoName = null;
9831022
if (ChipIDs.ContainsKey(chipMagic.Value))
984-
{
985-
detectedChip = ChipIDs[chipMagic.Value];
986-
isESP32S3 = (chipMagic.Value == 9);
987-
}
1023+
autoName = ChipIDs[chipMagic.Value];
9881024
else if (ChipMagicValues.ContainsKey(chipMagic.Value))
989-
{
990-
detectedChip = ChipMagicValues[chipMagic.Value];
991-
}
992-
else
993-
{
994-
detectedChip = $"Unknown(0x{chipMagic.Value:X})";
995-
}
996-
isESP8266 = (chipMagic.Value == 0xFFF0C101);
1025+
autoName = ChipMagicValues[chipMagic.Value];
1026+
1027+
if (autoName != null && autoName != detectedChip)
1028+
addWarningLine($"Warning: auto-detected chip is {autoName}, but user selected {detectedChip}");
1029+
else if (autoName != null)
1030+
addLogLine($"Auto-detect confirmed: {autoName}");
9971031
}
9981032

9991033
logger.setState($"{detectedChip} synced", Color.LightGreen);
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"entry": 1077413586,
3+
"text": "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",
4+
"text_start": 1077411840,
5+
"data": "GEDIP5IKOED8CjhAigs4QF4MOEDGDDhAdAw4QGwJOEAaDDhAWgw4QKYLOEAcCThAzgs4QBwJOEBwCjhAugo4QPwKOECKCzhAggo4QJQJOEDgCThAfgo4QMAOOED8CjhAgg04QHwOOEBeCDhAog44QF4IOEBeCDhAXgg4QF4IOEBeCDhAXgg4QF4IOEBeCDhAKA04QF4IOECaDThAfA44QA==",
6+
"data_start": 1070164920,
7+
"bss_start": 1070088192
8+
}

BK7231Flasher/FormMain.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ public partial class FormMain : Form, ILogListener
5353
{ BKType.GenericSPI, "Generic SPI CH341" },
5454
{ BKType.ESP32, "ESP32" },
5555
{ BKType.ESP32S3, "ESP32-S3" },
56+
{ BKType.ESP32C3, "ESP32-C3" },
5657
{ BKType.ESP8266, "ESP8266" },
5758
};
5859

@@ -514,6 +515,7 @@ void createFlasher()
514515
break;
515516
case BKType.ESP32:
516517
case BKType.ESP32S3:
518+
case BKType.ESP32C3:
517519
case BKType.ESP8266:
518520
flasher = new ESPFlasher(cts.Token);
519521
break;

0 commit comments

Comments
 (0)