7 คะแนน โดย pazzk 2025-12-30 | 7 ความคิดเห็น | แชร์ทาง WhatsApp

ขณะพัฒนาเฟิร์มแวร์บน ESP32
ได้พบปัญหา Interrupt Watchdog Reset ในสภาพแวดล้อมที่ใช้งานทั้ง
Flash Encryption และ PSRAM ร่วมกัน
บทความนี้สรุปกระบวนการแก้ไขปัญหาดังกล่าวไว้

> ESP32 เป็น MCU ที่ถูกใช้อย่างแพร่หลายในงาน IoT และระบบฝังตัว
> โดยบนพื้นฐานของ RTOS นั้นรองรับ TLS network communication, filesystem, OTA update เป็นต้น
> ทำให้สามารถสร้างแอปพลิเคชันแบบฝังตัวที่ต้องการการเชื่อมต่อเครือข่ายได้ด้วยชิปตัวเดียว

7 ความคิดเห็น

 
pathfinder 2025-12-30

อ่านเนื้อหาได้อย่างน่าสนใจเลยครับ
แต่สงสัยว่าทำไมพื้นที่ DMA ถึงใช้แคชด้วยล่ะครับ?
ดูเหมือนว่าจะเกิดปัญหาได้ง่ายนะครับ

 
pazzk 2025-12-31

DMA ไม่ได้ใช้แคชโดยตรง แต่เป็นหน่วยความจำที่ DMA และ CPU ใช้ร่วมกัน ดังนั้นจึงต้องคำนึงถึงความสอดคล้องของแคช

 
pathfinder 2026-01-01

แม้จะไม่มี MMU แต่ก็ยังสามารถกำหนดพื้นที่หน่วยความจำและคุณสมบัติของแต่ละพื้นที่ได้ด้วย MPU
น่าจะลองตรวจสอบดูสักครั้งนะครับ

 
pazzk 2026-01-02

ใน MCU ระดับสูงบางรุ่น อย่างที่คุณกล่าวไว้ สามารถใช้ MPU เพื่อกำหนดได้ไม่เพียงสิทธิ์การเข้าถึง แต่รวมถึงคุณสมบัติที่เกี่ยวข้องกับแคชในระดับแต่ละพื้นที่ด้วย เอกสารของ ST ต่อไปนี้น่าจะเป็นแหล่งอ้างอิงที่ดี: https://community.st.com/t5/stm32-mcus/…

อย่างไรก็ตาม ใน ESP32-S3 ที่ใช้ในบทความนี้ ไม่ได้มีวิธีการกำหนดคุณสมบัติ cacheable / non-cacheable แยกตามพื้นที่หน่วยความจำผ่าน MPU หรือกลไกที่คล้ายกัน เหมือนที่มีใน CPU ทั่วไปหรือ MCU บางรุ่น

สำหรับ ESP32-S3 หน่วยความจำภายนอก (Flash/PSRAM) ถูกออกแบบให้เข้าถึงผ่าน cache/MMU (TRM 4.3.3 External Memory) และการควบคุมสิทธิ์การเข้าถึงทำผ่าน PMS (Permission Management System) (TRM Chapter 15) แต่กลไกนี้มีไว้เพื่อการป้องกันการเข้าถึง และไม่ได้มีหน้าที่เปลี่ยนว่าจะผ่านแคชหรือไม่ หรือเปลี่ยนเส้นทางการเข้าถึงเอง

ลิงก์ TRM (Technical Reference Manual): https://documentation.espressif.com/esp32-s3_technical_reference_manua….

 
pathfinder 2026-01-02

ผมเข้าใจผิดไปเองว่าแน่นอนว่าต้องเป็นคอร์ arm
ขอบคุณสำหรับคำตอบที่กรุณามากครับ

 
pathfinder 2025-12-31

ผมสงสัยว่าตามที่คุณพูดเรื่องความสอดคล้องกันของแคช น่าจะต้องทำ cache invalidate ทุกครั้ง แล้วทำไมถึงไม่เขียนไปที่พื้นที่แบบ non-cacheable ไปเลย

 
pazzk 2026-01-01

อ้อ ต่างจากคอมพิวเตอร์ทั่วไป ใน MCU อย่าง ESP32 จะไม่มี MMU ที่สามารถเปลี่ยนคุณสมบัติของหน่วยความจำเป็นรายเพจขณะรันไทม์ได้ ดังนั้นอย่างที่คุณบอกเลยจึงไม่สามารถใช้งานแบบนั้นได้ โดยสถานะว่า cacheable / non-cacheable จะถูกกำหนดตามช่วงหน่วยความจำที่ตายตัวไว้ล่วงหน้า (internal SRAM จะถูกตรึงเป็น non-cacheable และ PSRAM จะถูกตรึงทั้งก้อนเป็นหน่วยความจำแบบ cacheable)

ขอบคุณสำหรับคำถามดี ๆ ครับ!