I2S là gì? Vai trò của BCLK, WS/LRCK và DATA trong âm thanh số
I2S là giao thức truyền âm thanh số giữa các IC qua ba đường BCLK, WS/LRCK và DATA. Bài viết giải thích nguyên lý, cấu trúc frame, cách tính BCLK và vai trò master/slave một cách rõ ràng, đúng chuẩn.
Mục lục
- Ba đường tín hiệu cốt lõi của I2S
- BCLK: nhịp cho từng bit
- WS/LRCK: cho biết kênh trái hay phải
- DATA: chở dữ liệu, MSB đi trước
- Frame và slot: dữ liệu được đóng khung ra sao?
- Cách tính tần số BCLK
- Master, slave và khi nào cần MCLK?
- Mono, stereo và TDM cho nhiều kênh
- Phân biệt I2S với I2C và SPI
- Hiểu nhầm thường gặp
- Câu hỏi thường gặp
- I2S có truyền được âm thanh analog không?
- Đã nối đủ BCLK, WS và DATA mà vẫn không có tiếng thì sao?
- Nhớ nhanh khác biệt giữa BCLK và WS thế nào?
- Dự án nào cũng cần dây MCLK không?
- Mono có cần hai slot như stereo không?
I2S (Inter-IC Sound) là giao thức truyền âm thanh số nối tiếp giữa các IC, dùng để đưa dữ liệu âm thanh từ vi điều khiển hoặc chip Bluetooth sang DAC (bộ chuyển đổi số sang tương tự) và ngược lại. Giao thức này cần tối thiểu ba đường: BCLK, WS/LRCK và DATA. Hiểu đúng ba đường này là nền tảng để kết nối ESP32 với DAC mà không bị mất tiếng, lệch kênh hay sai tốc độ phát.
Trong hệ thống DIY audio, nhạc được giải mã thành các mẫu số rồi truyền qua I2S tới DAC, chuyển thành tín hiệu analog đưa ra ampli. Để thấy vị trí của I2S trong toàn bộ luồng xử lý, hãy đọc thêm bài ESP32 xử lý âm thanh số: kiến trúc và giới hạn thực tế.
Ba đường tín hiệu cốt lõi của I2S
I2S tách bạch ba nhiệm vụ: định nhịp cho từng bit, xác định kênh và chở dữ liệu. Nhờ vậy bên nhận biết chính xác mỗi bit thuộc mẫu nào, kênh trái hay phải, mà không cần địa chỉ hay lệnh điều khiển.
| Tên | Tên gọi khác | Vai trò | Đặc điểm |
|---|---|---|---|
| BCLK | SCK, Bit Clock | Đồng hồ bit, định nhịp từng bit dữ liệu | Tần số cao hơn sample rate nhiều lần |
| WS | LRCK, LRCLK, Word Select | Chọn kênh trái/phải, đánh dấu ranh giới mẫu | Tần số bằng đúng sample rate |
| DATA | SD, DIN, DOUT | Chở các bit âm thanh nối tiếp | Truyền MSB trước |
| MCLK | Master Clock | Đồng hồ hệ thống tùy chọn cho DAC/codec | Thường bằng 256 lần sample rate |
BCLK: nhịp cho từng bit
BCLK (Bit Clock) là đồng hồ bit: mỗi chu kỳ BCLK tương ứng một bit trên đường DATA. Bên phát đặt dữ liệu theo nhịp này, bên nhận cũng đọc theo nhịp này. BCLK không mang thông tin nhạc, nhưng thiếu nó, dữ liệu không có mốc thời gian để giải mã.
WS/LRCK: cho biết kênh trái hay phải
WS (Word Select), còn gọi LRCK/LRCLK, là tín hiệu chọn kênh. Một mức logic báo kênh trái, mức còn lại báo kênh phải. Tần số WS bằng đúng sample rate (tần số lấy mẫu — số mẫu trong một giây, ví dụ 44,1 kHz hay 48 kHz), vì mỗi chu kỳ WS chứa một mẫu trái và một mẫu phải ở chế độ stereo. Nhờ WS, bên nhận biết khi nào một mẫu kết thúc.
DATA: chở dữ liệu, MSB đi trước
DATA (ký hiệu SD, Serial Data) là đường dữ liệu nối tiếp chở lần lượt các bit của từng mẫu, với MSB (bit có trọng số lớn nhất) truyền trước. Trên module, chân có thể ghi DIN (dữ liệu vào) ở phía DAC hoặc DOUT (dữ liệu ra) ở phía vi điều khiển — phải ghép đúng chiều ra với chiều vào, đồng thời nối chung mass (GND) để hai bên có cùng điện áp tham chiếu.
Frame và slot: dữ liệu được đóng khung ra sao?
Frame (khung) là một chu kỳ hoàn chỉnh của WS, chứa dữ liệu của mọi kênh tại một thời điểm lấy mẫu. Slot (khe) là phần của frame dành cho một kênh: frame stereo gồm hai slot, frame mono gồm một kênh. Số bit trong mỗi slot gọi là độ rộng slot, có thể bằng hoặc lớn hơn bit depth (độ sâu bit của mẫu, ví dụ 16 bit). Một mẫu 16 bit có thể nằm trong slot 32 bit, phần còn lại là bit đệm bằng 0. Vì vậy hai đầu phải khớp cả ba yếu tố: sample rate, bit depth và độ rộng slot — chỉ khớp sample rate là chưa đủ.
Theo định dạng Philips chuẩn, WS đổi trạng thái trước MSB một chu kỳ BCLK và dữ liệu được căn trái trong slot. Ở biến thể left-justified (căn trái), WS đổi đúng tại MSB. Hai định dạng trông rất giống nhau, nhưng chọn sai có thể khiến dữ liệu bị dịch một bit, gây méo hoặc lệch kênh. Khi âm thanh bất thường, hãy đối chiếu định dạng giữa hai đầu trước tiên.
Cách tính tần số BCLK
BCLK không chọn tùy ý mà suy ra từ cấu hình âm thanh:
BCLK = sample_rate × số bit mỗi slot × số kênh
Trong đó sample_rate tính bằng Hz, số bit mỗi slot tính bằng bit, số kênh là 1 (mono) hoặc 2 (stereo), kết quả tính bằng Hz. Giả định: truyền liên tục, không có khoảng nghỉ giữa các frame. Đây là kết quả tính toán theo công thức, không phải kết quả đo trên module cụ thể.
| Sample rate | Độ rộng slot | Số kênh | BCLK |
|---|---|---|---|
| 44,1 kHz | 16 bit | 2 | 1,4112 MHz |
| 44,1 kHz | 32 bit | 2 | 2,8224 MHz |
| 48 kHz | 16 bit | 2 | 1,536 MHz |
| 48 kHz | 32 bit | 2 | 3,072 MHz |
| 48 kHz | 32 bit | 1 | 1,536 MHz |
| 48 kHz | 16 bit | 1 | 0,768 MHz |
Ví dụ phổ biến: nhạc 48 kHz, stereo, slot 32 bit cho BCLK = 48.000 × 32 × 2 = 3.072.000 Hz, tức 3,072 MHz. Nếu cấu hình cho ra BCLK khác hẳn trong khi ba thông số trên không đổi, chắc chắn một trong hai đầu đang cấu hình không khớp.
Master, slave và khi nào cần MCLK?
Master (bên chủ) là phía tạo BCLK và WS; slave (bên tớ) là phía nhận hai clock đó và đồng bộ dữ liệu theo chúng. Trong đa số dự án ESP32 phát nhạc ra DAC, ESP32 làm master. Nếu nguồn âm thanh tự tạo clock, như một số chip thu Bluetooth hay codec, ESP32 có thể phải làm slave. Nguyên tắc quan trọng: một liên kết chỉ nên có một nguồn tạo BCLK và WS rõ ràng — hai bên cùng phát hoặc không bên nào phát đều khiến liên kết không ổn định.
ESP32 và ESP32-S3 có hai cổng I2S, và nhờ GPIO matrix (ma trận định tuyến chân linh hoạt), tín hiệu I2S có thể gán vào gần như mọi GPIO. Điều này tiện cho đi dây nhưng dễ khai báo nhầm chân, nên hãy ghi rõ chân BCLK, WS, DATA trong code.
MCLK (Master Clock) là đồng hồ hệ thống tùy chọn, thường bằng 256×fs — ví dụ 12,288 MHz khi fs = 48 kHz. Một số DAC/codec cần MCLK cho mạch nội bộ, nhiều module đơn giản lại có mạch tạo clock nội bộ nên không cần. Không thể khẳng định DAC nào cũng cần MCLK: phải kiểm tra datasheet của đúng module đang dùng. Nếu module yêu cầu MCLK mà không được cấp, thường sẽ mất tiếng hoàn toàn dù ba đường chính vẫn có tín hiệu.
Mono, stereo và TDM cho nhiều kênh
Ở stereo, hai mức của WS phân biệt trái/phải trên cùng một đường DATA, nên một đường dữ liệu là đủ cho hai kênh. Ở mono, dữ liệu có thể chiếm một slot trong frame hoặc được lặp ở cả hai slot để tương thích DAC stereo, tùy cấu hình. Không khớp chế độ mono/stereo giữa hai đầu thường gây chỉ nghe một bên, lặp một kênh ở cả hai loa, hoặc sai tốc độ và cao độ.
Khi cần từ ba kênh độc lập trở lên, người ta dùng TDM (ghép kênh theo thời gian): nhiều slot xếp nối tiếp trong một frame dài hơn trên cùng một đường DATA, mỗi slot cho một kênh. TDM dùng chung nguyên lý BCLK, WS, DATA nhưng cấu hình phức tạp hơn. Với loa Bluetooth và loa DIY hai kênh thông thường, bạn chưa cần tới TDM.
Phân biệt I2S với I2C và SPI
Ba tên này dễ nhầm nhưng mục đích hoàn toàn khác nhau:
| Tiêu chí | I2S | I2C | SPI |
|---|---|---|---|
| Mục đích | Truyền âm thanh số liên tục | Điều khiển, cấu hình chip | Truyền dữ liệu đa dụng tốc độ cao |
| Tín hiệu đặc trưng | BCLK, WS, DATA | SCL, SDA | SCLK, MOSI, MISO, CS |
| Địa chỉ thiết bị | Không có | Có địa chỉ riêng | Chọn bằng chân CS |
Nói ngắn gọn: I2C để ra lệnh cho chip, SPI để truyền dữ liệu đa dụng, còn I2S chuyên chở luồng âm thanh liên tục và không có địa chỉ. Trong cùng một hệ thống, ESP32 có thể dùng I2C để cấu hình codec rồi dùng I2S để truyền nhạc tới chính codec đó. Nhầm lẫn hay gặp nhất là đấu dây theo sơ đồ I2C cho thiết bị yêu cầu I2S.
Hiểu nhầm thường gặp
- Nối đúng ba dây là xong: còn phải khớp sample rate, độ rộng slot, định dạng, vai trò master/slave và nối chung mass.
- BCLK bằng sample rate: sai — đó là tần số của WS; BCLK cao hơn nhiều lần vì mỗi mẫu chứa hàng chục bit.
- DAC nào cũng cần MCLK: không đúng; nhu cầu này tùy thiết kế từng module.
- Đoán một nguyên nhân khi mất tiếng: hãy khoanh vùng theo thứ tự nguồn cấp, mass, BCLK, WS, DATA rồi mới tới phần mềm.
Đã nắm nguyên lý, bước tiếp theo là thực hành đấu nối trong bài kết nối ESP32-S3 với DAC I2S: sơ đồ chân và cách kiểm tra tín hiệu.
Câu hỏi thường gặp
I2S có truyền được âm thanh analog không?
Không. I2S chỉ truyền dữ liệu số. Tín hiệu phải qua DAC để thành analog, rồi qua ampli mới đủ mức kéo loa.
Đã nối đủ BCLK, WS và DATA mà vẫn không có tiếng thì sao?
Các khả năng thường gặp: không khớp sample rate, độ rộng slot hoặc định dạng; chưa nối chung mass; DAC cần MCLK nhưng chưa được cấp; nhầm chiều DIN/DOUT. Hãy kiểm tra từng khả năng một.
Nhớ nhanh khác biệt giữa BCLK và WS thế nào?
WS chọn kênh, BCLK đếm bit, DATA chở bit. WS chạy bằng sample rate, BCLK chạy nhanh hơn nhiều lần.
Dự án nào cũng cần dây MCLK không?
Không. Chỉ khi DAC hoặc codec yêu cầu đồng hồ hệ thống riêng theo tài liệu của module thì mới cần cấp MCLK.
Mono có cần hai slot như stereo không?
Tùy cấu hình: có hệ chỉ truyền một slot, có hệ giữ khung hai slot. Quan trọng là đặt cùng một chế độ ở cả hai đầu.
Bạn đang làm loa DIY hoặc mạch âm thanh với ESP32 và cần chọn module DAC, ampli tương thích? Hãy tham khảo sản phẩm và hướng dẫn kỹ thuật tại Cimo để đối chiếu thông số trước khi mua, tránh chọn sai định dạng hoặc sai điện áp ngay từ đầu.