Show HN: Esp32sim - 브라우저에서 ESP32 펌웨어 실행하기

2 hours ago 2

esp32sim은 Rust로 구현한 명령어 수준 ESP32 에뮬레이터로, Xtensa와 RISC-V 기반 4개 SoC에서 실제 마스크 ROM, 부트로더, 수정하지 않은 애플리케이션을 실행함 WebAssembly 버전은 설치나 계정 없이 브라우저에서 실행되며, 디스플레이와 터치, 오디오, 카메라를 사용하는 보드 데모와 자체 펌웨어 로딩을 지원함 칩별 CPU와 메모리 맵은 분리하되 주변장치와 실행 환경을 공유하며, ESP32-S3는 AArch64 및 WebAssembly JIT를 갖추고 C3/C6는 인터프리터로 실행함 가상 WiFi AP에 수정하지 않은 Espressif WiFi 바이너리를 연결하고 네이티브 환경에서는 NAT로 실제 네트워크에 접근할 수 있음. 브라우저에는 NAT가 없고, C6 무선 실행에는 아날로그 보정을 우회하는 스텁이 필요함 실제 하드웨어와의 차등 테스트를 수행하지만 연속적인 사이클 단위 일치를 보장하지는 않음. S3는 성숙 단계, C3/C6는 초안 단계이며, S3도 일부 화면 갱신 부하에서는 실시간 실행이 지연됨 실행 범위와 칩별 차이 ESP32, ESP32-S3, ESP32-C3, ESP32-C6를 명령어 수준에서 에뮬레이션하며, 실제 마스크 ROM부터 2단계 부트로더, FreeRTOS, 애플리케이션까지 부팅함 기본 실행 모델은 펌웨어를 패치하거나 중간에 스텁을 넣지 않는 방식이지만, C6 무선 실행에는 별도의 예외가 있음 클라우드나 계정 없이 사용할 수 있으며 프로젝트 라이선스는 MIT임 기존 ESP32는 듀얼 Xtensa LX6에서 ECO3 ROM을 부팅하고 GPIO, UART, 타이머를 지원함 LilyGO TTGO T-Display 보드 모델을 선택하면 ST7789 디스플레이와 버튼을 추가함 ESP32-S3는 240MHz 듀얼 Xtensa LX7을 모델링하며, 블록 인터프리터와 AArch64 JIT를 사용함 처리 속도 표기는 초당 약 1억 5,000만~2억 4,000만 명령어이며, 지원 상태는 성숙 단계임 ESP32-C3는 160MHz RV32IMC, ESP32-C6는 160MHz RV32IMAC 단일 코어를 모델링함 두 칩은 블록 캐시나 JIT 없는 인터프리터를 사용하며, hello_world는 실시간보다 충분히 빠르게 실행됨 모두 초안 단계이며, C3는 콘솔만 지원하고 애플리케이션 직접 부팅인 --boot app은 지원하지 않음 C6는 자체 메모리 맵과 PLIC를 사용하며 디스플레...

Read Entire Article