Chọn board ESP32 cho dự án audio: PSRAM, flash, GPIO và USB cần biết
Bài viết hướng dẫn chọn board ESP32 hoặc ESP32-S3 cho dự án audio theo nhu cầu thật: có cần Bluetooth Classic hay không, khi nào cần PSRAM, flash bao nhiêu là đủ, và cách đếm GPIO khả dụng cho I2S sau khi trừ chân flash, strapping và USB.
Mục lục
- Tiêu chí 1: Dự án có cần Bluetooth Classic hay không?
- Tiêu chí 2: Khi nào cần PSRAM?
- Ví dụ: tính nhu cầu đệm cho internet radio
- Tiêu chí 3: Dung lượng flash bao nhiêu là đủ?
- Tiêu chí 4: Chip cầu USB-UART và USB nguyên bản của S3
- Tiêu chí 5: Đếm GPIO khả dụng cho I2S sau khi trừ chân đặc biệt
- Ví dụ: vì sao một board S3 hết chân dù ghi 45 GPIO
- Bảng so sánh ESP32 gốc và ESP32-S3 cho audio
- Kết luận chọn board theo tình huống
- Câu hỏi thường gặp
- Không có PSRAM có làm internet radio trên ESP32 được không?
- ESP32-S3 có nhận nhạc Bluetooth từ điện thoại như loa thường không?
- Flash 16 MB có làm tiếng hay hơn flash 4 MB không?
- Có nên dùng chân strapping cho I2S không?
- DAC nội của ESP32 gốc có dùng nghe nhạc thay DAC ngoài được không?
Chọn board ESP32 cho dự án audio không nên bắt đầu bằng câu hỏi board nào mới hơn, mà bằng ba câu hỏi thực tế: dự án có cần Bluetooth Classic để nhận nhạc hay không, lượng dữ liệu cần đệm trong RAM là bao nhiêu, và số chân còn trống sau khi nối DAC, màn hình, nút bấm và thẻ nhớ là bao nhiêu. Trả lời đúng ba câu này, việc chọn board sẽ rõ ràng và tránh mua nhầm phải thay giữa chừng.

Bài này đi qua từng tiêu chí theo datasheet Espressif: PSRAM (Pseudo Static RAM, RAM giả tĩnh gắn ngoài chip), dung lượng flash, chip cầu USB-UART, số GPIO khả dụng cho I2S sau khi trừ chân đặc biệt, và khác biệt giữa hai dòng chip. Nếu chưa nắm luồng xử lý tổng thể, hãy đọc trước bài ESP32 xử lý âm thanh số: kiến trúc và giới hạn thực tế để có bức tranh nền.
Tiêu chí 1: Dự án có cần Bluetooth Classic hay không?
Đây là tiêu chí loại trừ nhanh nhất. Bluetooth Classic là thế hệ Bluetooth truyền thống, trong đó có A2DP (Advanced Audio Distribution Profile, hồ sơ truyền nhạc stereo từ điện thoại tới thiết bị nhận). ESP32 gốc hỗ trợ Bluetooth v4.2 BR/EDR, tức Classic, cùng BLE (Bluetooth Low Energy). ESP32-S3 chỉ có Bluetooth 5 LE, không có Classic.
Hệ quả rất trực tiếp: muốn làm bộ nhận nhạc Bluetooth kiểu loa truyền thống qua A2DP, bạn cần ESP32 gốc. Chọn S3 cho mục tiêu đó là sai ngay từ đầu. Ngược lại, nếu dự án chỉ phát nhạc từ thẻ nhớ, mạng Wi-Fi hoặc điều khiển qua BLE, việc S3 thiếu Classic không còn là vấn đề.
Tiêu chí 2: Khi nào cần PSRAM?
SRAM là bộ nhớ trong chip, nơi đặt các buffer (vùng nhớ đệm) quan trọng cho DMA (Direct Memory Access, cơ chế ngoại vi tự chuyển dữ liệu mà CPU không phải chép từng mẫu). Theo datasheet, ESP32 gốc có 520 KB SRAM, ESP32-S3 có 512 KB SRAM, và con số này phải chia cho hệ điều hành, Wi-Fi, Bluetooth và tác vụ giải mã, nên phần trống cho audio luôn nhỏ hơn.
PSRAM nằm ngoài chip, dung lượng lớn hơn nhưng truy cập chậm hơn SRAM và không phải buffer DMA nào cũng nên đặt ở đó. PSRAM phát huy tác dụng ở ba việc: đệm luồng stream từ mạng để chống giật, giữ dữ liệu giải mã trung gian của các định dạng nén nặng, và lưu dữ liệu giao diện lớn. Phát file WAV ngắn từ thẻ nhớ vẫn làm được khi không có PSRAM; với internet radio hoặc phát FLAC, PSRAM gần như là điều kiện để ổn định.
Về tên module: họ ESP32 gốc có WROOM thường không có PSRAM và WROVER có PSRAM trên module. ESP32-S3-WROOM-1 dùng hậu tố chỉ cấu hình: R2 là 2 MB PSRAM Quad SPI, R8 là 8 MB PSRAM Octal SPI, không có hậu tố R là không có PSRAM. Đọc đúng hậu tố khi đặt mua quan trọng hơn tên dòng board, vì cùng một board có thể lắp các biến thể module khác nhau.
Ví dụ: tính nhu cầu đệm cho internet radio
Ví dụ: dự án phát luồng PCM sau giải mã ở 48 kHz, 16 bit, stereo. Tốc độ dữ liệu là 48000 x 16 x 2 = 1.536.000 bit mỗi giây, tương đương 192.000 byte mỗi giây. Nếu muốn đệm 2 giây để chịu được lúc Wi-Fi trễ cục bộ, bạn cần 192.000 x 2 = 384.000 byte, khoảng 375 KiB, chỉ cho riêng buffer PCM. Cộng thêm buffer cho dữ liệu nén đầu vào, bộ giải mã và ngăn xếp mạng, tổng nhu cầu dễ vượt phần SRAM trống thực tế sau khi hệ thống đã chạy. Đây là tình huống điển hình nên chọn board có PSRAM 2 MB hoặc 8 MB, và đặt buffer stream lớn ở PSRAM, trong khi vẫn giữ buffer DMA I2S ngắn hạn ở SRAM theo khuyến nghị của SDK đang dùng.
Tiêu chí 3: Dung lượng flash bao nhiêu là đủ?
Flash là bộ nhớ lưu firmware, hệ file và tài nguyên như font hoặc ảnh giao diện. ESP32-S3-WROOM-1 phổ biến có các mức 4 MB, 8 MB, 16 MB trong tên gọi N4, N8, N16; ESP32-S3-WROOM-2 có thể lên tới 32 MB. Flash lớn không làm tiếng hay hơn và không thay được RAM: firmware nhiều tính năng, cập nhật OTA (Over-The-Air, cập nhật qua mạng) hai phân vùng và hệ file lớn mới là lý do cần flash lớn.
Quy tắc thực hành: dự án phát nhạc đơn giản thường vừa ở mức flash trung bình; dự án có OTA, nhiều tài nguyên giao diện hoặc lưu preset nên ưu tiên flash lớn hơn. Dung lượng firmware cụ thể phụ thuộc thư viện bạn đưa vào. Nếu còn phân vân về framework, bài ESP-IDF và Arduino cho audio trên ESP32 sẽ giúp bạn hình dung phần mềm trước khi chốt phần cứng.
Tiêu chí 4: Chip cầu USB-UART và USB nguyên bản của S3
USB-UART là chip cầu nối chuyển tín hiệu USB của máy tính thành UART (Universal Asynchronous Receiver-Transmitter, giao tiếp nối tiếp) để nạp code và xem log. Nhiều board ESP32 gốc dùng chip cầu riêng như CP2102 hoặc CH340. Khi đó cổng USB trên board thực chất chỉ là đường nạp và debug nối tiếp, máy tính cần driver của chip cầu, và ESP32 không thể đóng vai trò thiết bị USB thật.
ESP32-S3 khác ở điểm này: chip có USB 1.1 OTG (On-The-Go, cho phép thiết bị đóng vai trò host hoặc device) nguyên bản và USB Serial/JTAG tích hợp, thường dùng GPIO19 và GPIO20 cho tín hiệu USB. Nhờ vậy nhiều board S3 không cần chip cầu vẫn nạp code và xem log qua USB, đồng thời có thể triển khai chức năng USB device tùy SDK. Đổi lại, GPIO19 và GPIO20 nên để dành cho USB, không nên gán cho I2S.
Tiêu chí 5: Đếm GPIO khả dụng cho I2S sau khi trừ chân đặc biệt
I2S (Inter-IC Sound, giao thức truyền âm thanh số giữa các IC) cần tối thiểu ba tín hiệu BCLK (bit clock, xung nhịp cho từng bit), WS (word select, chọn kênh trái phải) và DATA; một số cấu hình cần thêm MCLK (master clock, xung nhịp chủ). ESP32 gốc có 34 GPIO, ESP32-S3 có 45 GPIO trên giấy, nhưng số chân dùng thật luôn ít hơn vì phải trừ các nhóm sau.
- Chân flash: trên ESP32 gốc, GPIO6 đến GPIO11 nối với flash SPI tích hợp trên module và không dùng cho mục đích khác. Trên S3 bản PSRAM Octal, một số chân như GPIO33 đến GPIO37 bị chiếm cho bus PSRAM.
- Chân strapping: là các chân mà mức điện áp lúc khởi động quyết định chế độ boot và một số cấu hình ban đầu. ESP32 gốc có các chân strapping gồm MTDI, GPIO0, GPIO2, MTDO và GPIO5. ESP32-S3 có GPIO0, GPIO3, GPIO45 và GPIO46. Gán thiết bị ngoại vi kéo mức các chân này sai lúc cấp nguồn có thể làm board không boot hoặc boot sai chế độ.
- Chân USB nguyên bản trên S3: GPIO19 và GPIO20 như đã nói ở trên.
- Chân đã dành cho UART debug, nút boot và LED trên board cụ thể.
Cách làm an toàn là liệt kê nhu cầu chân trước: I2S cần 3 đến 4 chân, I2C cần 2 chân, SPI thẻ nhớ cần 3 đến 4 chân, cộng nút bấm và LED. Trừ các nhóm đặc biệt ở trên rồi mới gán chân I2S vào vùng còn trống. Cách nối cụ thể với DAC được trình bày ở bài kết nối ESP32-S3 với DAC I2S.
Ví dụ: vì sao một board S3 hết chân dù ghi 45 GPIO
Ví dụ: bạn dùng board ESP32-S3 bản PSRAM Octal 8 MB, dự án cần I2S phát 4 chân gồm cả MCLK, I2S thu cho micro 3 chân, I2C 2 chân, SPI thẻ nhớ 4 chân và 3 nút bấm, tổng là 16 chân tín hiệu. Nếu trừ nhóm chân PSRAM Octal ở vùng GPIO33 đến GPIO37, hai chân USB GPIO19 và GPIO20, và thận trọng tránh bốn chân strapping, số chân thực sự thoải mái để gán đã giảm đáng kể so với con số 45 GPIO trên datasheet. Dự án vẫn làm được, nhưng bạn phải vẽ bảng gán chân ngay từ đầu; cắm dây theo chân trống nhìn thấy trên board rồi mới phát hiện trùng chân PSRAM hoặc chân strapping là lỗi rất thường gặp.
Bảng so sánh ESP32 gốc và ESP32-S3 cho audio
| Tiêu chí | ESP32 gốc | ESP32-S3 |
| CPU | Xtensa LX6 hai nhân, tối đa 240 MHz | Xtensa LX7 hai nhân, tối đa 240 MHz, có tập lệnh vector hỗ trợ DSP |
| SRAM | 520 KB | 512 KB |
| Bluetooth | Classic v4.2 BR/EDR và BLE | Chỉ Bluetooth 5 LE, không có Classic |
| DAC nội | Có 2 kênh DAC 8-bit | Không có DAC nội |
| I2S | 2 cổng | 2 cổng |
| USB | Không có USB nguyên bản, board thường dùng chip cầu USB-UART | USB 1.1 OTG và USB Serial/JTAG nguyên bản |
| PSRAM | Module WROVER có PSRAM, WROOM thường không có | Tùy hậu tố module, ví dụ R2 là 2 MB, R8 là 8 MB |
| GPIO | 34 GPIO lập trình được | 45 GPIO lập trình được |
Hai điểm dễ hiểu nhầm nhất là DAC nội và tập lệnh vector. DAC (Digital-to-Analog Converter, bộ chuyển đổi số sang tương tự) nội 8-bit của ESP32 gốc chỉ phù hợp tín hiệu đơn giản, không thay được DAC I2S ngoài khi nghe nhạc; S3 không có DAC nội nên bắt buộc dùng DAC ngoài. S3 có lệnh vector hỗ trợ DSP (Digital Signal Processing, xử lý tín hiệu số) cho các tác vụ như lọc và FFT (Fast Fourier Transform, biến đổi Fourier nhanh), nhưng lợi thế này chỉ có ý nghĩa khi code thực sự dùng chúng.
Kết luận chọn board theo tình huống
- Làm bộ nhận A2DP, loa Bluetooth Classic: chọn ESP32 gốc, ưu tiên bản WROVER có PSRAM nếu còn giải mã và stream nặng.
- Làm máy phát nhạc từ thẻ nhớ hoặc internet radio, cần USB nguyên bản hoặc DSP nhẹ: chọn ESP32-S3 bản có PSRAM.
- Làm dự án học I2S cơ bản, phát file đơn giản, ngân sách thấp: board không PSRAM vẫn đủ, miễn là bạn giữ buffer và tính năng trong giới hạn SRAM.
- Dự án nhiều ngoại vi: quyết định nằm ở bảng gán chân. Hãy trừ chân flash, strapping, PSRAM và USB trước khi hứa hẹn tính năng.
Hãy đối chiếu hậu tố module và sơ đồ chân của board cụ thể với datasheet trước khi đặt mua. Khi cần tham khảo module và linh kiện cho cấu hình đã chọn, bạn có thể xem tại Cimo và kiểm tra lại thông số với tài liệu của nhà sản xuất.
Câu hỏi thường gặp
Không có PSRAM có làm internet radio trên ESP32 được không?
Có thể với luồng bitrate thấp và buffer nhỏ, nhưng nguy cơ giật và hết bộ nhớ cao hơn. Với dự án dùng ổn định, board có PSRAM an toàn hơn.
ESP32-S3 có nhận nhạc Bluetooth từ điện thoại như loa thường không?
Không, vì S3 chỉ có Bluetooth LE, không có Classic. Muốn nhận A2DP, hãy chọn ESP32 gốc.
Flash 16 MB có làm tiếng hay hơn flash 4 MB không?
Không. Chất lượng tiếng phụ thuộc DAC, nguồn, ampli và loa; độ ổn định phát phụ thuộc RAM, buffer và firmware.
Có nên dùng chân strapping cho I2S không?
Nên tránh nếu còn chân khác, vì ngoại vi nối vào có thể kéo mức sai lúc cấp nguồn và làm board boot lỗi.
DAC nội của ESP32 gốc có dùng nghe nhạc thay DAC ngoài được không?
Không nên. DAC nội 8-bit phù hợp kiểm tra nhanh; nghe nhạc nên dùng DAC I2S ngoài.