Giao thức I2S: Làm việc, Sự khác biệt & Ứng dụng của nó

Hãy Thử Công Cụ CủA Chúng Tôi Để LoạI Bỏ Các VấN Đề





Hệ thống kỹ thuật số và các yêu cầu về dữ liệu âm thanh của nó trong Thiết bị di động, Máy tính & Tự động hóa gia đình sản phẩm đã thay đổi đáng kể trong một khoảng thời gian. Tín hiệu âm thanh từ hoặc đến bộ xử lý đang được kỹ thuật số hóa. Dữ liệu này trong các hệ thống khác nhau được xử lý thông qua nhiều thiết bị như DSP , ADC, DAC, giao diện I / O kỹ thuật số, v.v. Để các thiết bị này giao tiếp dữ liệu âm thanh với nhau, cần có một giao thức chuẩn. Một trong số đó là giao thức I2S. Nó là một giao diện bus nối tiếp, được thiết kế bởi Philip Semiconductor vào tháng 2 năm 1986 cho giao diện âm thanh kỹ thuật số giữa các thiết bị. Bài viết này thảo luận tổng quan về I Giao thức 2S nó hoạt động với các ứng dụng.


Giao thức I2S là gì?

Giao thức được sử dụng để truyền dữ liệu âm thanh kỹ thuật số từ thiết bị này sang thiết bị khác được gọi là giao thức I2S hoặc Inter-IC Sound. Giao thức này truyền dữ liệu âm thanh PCM (được điều chế mã xung) từ IC này sang IC khác trong một thiết bị điện tử. I2S đóng một vai trò quan trọng trong việc truyền các tệp âm thanh được ghi trước từ MCU đến DAC hoặc bộ khuếch đại. Giao thức này cũng có thể được sử dụng để số hóa âm thanh bằng micrô. Không có tính năng nén trong các giao thức I2S, vì vậy bạn không thể phát OGG hoặc MP3 hoặc các định dạng âm thanh khác làm cô đọng âm thanh, tuy nhiên, bạn có thể phát các tệp WAV.



Đặc trưng

Các Các tính năng của giao thức I2S bao gồm những điều sau đây.

  • Nó có 8 đến 32 bit dữ liệu cho mỗi mẫu.
  • Tx & Rx FIFO ngắt.
  • Nó hỗ trợ DMA.
  • Khoảng thời gian chọn từ 16-bit, 32-bit, 48-bit hoặc 64-bit.
  • Phát trực tuyến âm thanh hai chiều đồng thời.
  • Chiều rộng mẫu 8 bit, 16 bit và 24 bit.
  • Nó có các tỷ lệ mẫu khác nhau.
  • Tốc độ dữ liệu lên đến 96 kHz thông qua khoảng thời gian chọn từ 64-bit.
  • FIFO âm thanh nổi xen kẽ hoặc FIFO kênh trái và phải độc lập
  • Kích hoạt độc lập Tx & Rx.

Giao thức truyền thông I2S đang hoạt động

I2S giao thức truyền thông là một giao thức 3 Wire giúp xử lý dữ liệu âm thanh một cách đơn giản thông qua một bus nối tiếp 3 dòng bao gồm SCK (Đồng hồ nối tiếp liên tục), WS (Chọn từ) & SD (Dữ liệu nối tiếp).



Kết nối 3 dây của I2S:

SCK

SCK hoặc Serial Clock là dòng đầu tiên của giao thức I2S, còn được gọi là BCLK hoặc dòng đồng hồ bit được sử dụng để lấy dữ liệu trên một chu kỳ tương tự. Tần số xung nhịp nối tiếp được xác định đơn giản bằng cách sử dụng công thức như Tần số = Tốc độ lấy mẫu x Bit cho mỗi kênh x không. của các kênh.

WS

Trong giao thức truyền thông I2S, WS hoặc word select là đường dây còn được gọi là dây FS (Frame Select) phân tách kênh bên phải hoặc bên trái.

Nếu WS = 0 thì kênh trái hoặc kênh-1 được sử dụng.

Nếu WS = 1 thì kênh bên phải hoặc kênh-2 được sử dụng.

SD

Dữ liệu nối tiếp hoặc SD là dây cuối cùng nơi tải trọng được truyền trong vòng 2 phần bổ sung. Vì vậy, điều rất quan trọng là MSB được chuyển đầu tiên, vì cả bộ phát và bộ nhận có thể bao gồm các độ dài từ khác nhau. Do đó, máy phát hoặc máy thu phải nhận biết có bao nhiêu bit được truyền đi.

  • Nếu độ dài từ của bộ nhận lớn hơn bộ phát, thì từ đó sẽ được rút ngắn (các bit LSB được đặt thành không).
  • Nếu độ dài từ của máy thu nhỏ hơn độ dài từ của máy phát, thì các bit LSB sẽ bị bỏ qua.

Các hệ thống điều khiển có thể gửi dữ liệu trên cạnh trước hoặc cạnh sau của xung đồng hồ . Điều này có thể được cấu hình trong đăng ký điều khiển . Nhưng máy thu chốt dữ liệu nối tiếp và chỉ WS trên cạnh đầu tiên của xung đồng hồ . Máy phát chỉ truyền dữ liệu sau một xung đồng hồ sau khi thay đổi trong WS. Máy thu sử dụng tín hiệu WS để đồng bộ hóa dữ liệu nối tiếp.

Các thành phần mạng I2S

Khi nhiều thành phần I2S được kết nối với nhau thì đây được gọi là mạng I2S. Thành phần của mạng này bao gồm các tên khác nhau và các chức năng khác nhau. Vì vậy, sơ đồ sau đây cho thấy 3 mạng khác nhau. Ở đây, một bảng ESP NodeMCU được sử dụng làm bộ phát và một bảng đột phá âm thanh I2S được sử dụng làm bộ thu. Ba dây được sử dụng để kết nối máy phát và máy thu là SCK, WS & SD.

  Các thành phần mạng I2S
Các thành phần mạng I2S

Trong sơ đồ đầu tiên, máy phát (Tx) là chủ nên nó điều khiển các đường SCK (đồng hồ nối tiếp) & WS (chọn từ).

Trong sơ đồ thứ hai, bộ thu là tổng thể. Vì vậy cả hai đường SCK & WS đều bắt đầu từ đầu thu & đầu phát kết thúc.

Trong sơ đồ thứ ba, một bộ điều khiển bên ngoài được kết nối với các nút trong mạng hoạt động giống như thiết bị chính. Vì vậy, thiết bị này tạo ra SCK & WS.

Trong tất cả các mạng I2S ở trên, chỉ có một thiết bị chính duy nhất có sẵn và nhiều thành phần khác để truyền hoặc nhận dữ liệu âm thanh.

Trong I2S bất kỳ thiết bị nào cũng có thể là thiết bị chính bằng cách cung cấp tín hiệu xung nhịp.

Sơ đồ thời gian I2S

Để hiểu rõ hơn về I2S và chức năng của nó, chúng ta có biểu đồ thời gian của giao thức truyền thông I2S được hiển thị bên dưới. Sơ đồ thời gian của giao thức I2S được hiển thị bên dưới bao gồm ba dây SCK, WS & SD.

  Sơ đồ thời gian giao thức I2S
Sơ đồ thời gian giao thức I2S

Trong sơ đồ trên, đầu tiên, đồng hồ nối tiếp có Tần số = Tốc độ lấy mẫu * Bit cho mỗi kênh * không. của các kênh). Dòng chọn từ là dòng thứ hai thay đổi giữa ‘1’ cho kênh bên phải và ‘0’ cho kênh bên trái.

Dòng thứ ba là dòng dữ liệu nối tiếp mà dữ liệu được truyền trên mỗi chu kỳ đồng hồ trên cạnh rơi được ký hiệu bằng các dấu chấm từ CAO đến THẤP.

Ngoài ra, chúng ta có thể nhận thấy rằng dòng WS thay đổi một chu kỳ CLK trước khi MSB được truyền đi, điều này cho phép người nhận có thời gian lưu trữ từ trước đó và xóa thanh ghi đầu vào cho từ tiếp theo. MSB được gửi khi SCK thay đổi sau khi WS thay đổi.

Bất cứ khi nào một dữ liệu được truyền giữa máy phát và máy thu sẽ có độ trễ lan truyền là

độ trễ lan truyền = (chênh lệch thời gian giữa đồng hồ bên ngoài và đồng hồ bên trong của máy thu) + (chênh lệch thời gian giữa đồng hồ bên trong đến thời điểm nhận dữ liệu).

Để giảm thiểu độ trễ lan truyền và để đồng bộ hóa quá trình truyền dữ liệu giữa máy phát và máy thu, yêu cầu máy phát có chu kỳ đồng hồ là

T >tr  –   Giả sử rằng T là chu kỳ xung nhịp của máy phát và tr là chu kỳ xung nhịp tối thiểu của máy phát.

Trong điều kiện trên, nếu chúng ta xem xét ví dụ máy phát với tốc độ truyền dữ liệu 2,5MHz thì:

tr = 360ns

đồng hồ tHC cao (tối thiểu)> 0,35 T.

đồng hồ TLC thấp (tối thiểu>> 0,35T.

Máy thu như một phụ với tốc độ truyền dữ liệu 2,5MHz thì:

đồng hồ tHC cao (tối thiểu) <0,35 T

đồng hồ TLC thấp (tối thiểu) <0,35T.

thời gian thiết lập tst (tối thiểu) <0,20T.

Giao thức I2S Arduino

Mục tiêu chính của dự án này là tạo giao diện theremin I2S bằng cách sử dụng thư viện Arduino I2S. Các thành phần bắt buộc để thực hiện dự án này là; Arduino MKR Zero, Breadboard , Dây nhảy, Adafruit MAX98357A, 3W, loa 4 ohms và RobotGeek Slider.

Thư viện Arduino I2S chỉ cho phép bạn truyền và nhận dữ liệu âm thanh kỹ thuật số qua bus I2S. Vì vậy, ví dụ này nhằm mục đích giải thích cách sử dụng thư viện này để điều khiển I2S DAC để tái tạo âm thanh được tính toán trong thiết kế Arduino.

Mạch này có thể được kết nối như; I2S DAC được sử dụng trong ví dụ này chỉ cần ba dây cũng như nguồn điện cho bus I2S. Các kết nối cho I2S trên Arduino MKRZero tuân theo như sau;

Dữ liệu nối tiếp (SD) trên chân A6;

Đồng hồ nối tiếp (SCK) trên pin2;

Khung hoặc Word Select (FS) trên pin3;

Đang làm việc

Về cơ bản, theremin có hai điều khiển cao độ và âm lượng. Vì vậy, hai thông số này được sửa đổi bằng cách di chuyển hai chiết áp trượt, tuy nhiên, bạn cũng có thể điều chỉnh chúng để đọc chúng. Hai chiết áp được kết nối theo dạng bộ chia điện áp, vì vậy di chuyển các chiết áp này bạn sẽ nhận được các giá trị từ 0 đến 1023. Sau đó, các giá trị này được ánh xạ giữa tần số tối đa và tối thiểu và âm lượng nhỏ nhất và cao nhất.

  Sơ đồ nhiệt độ I2S
Sơ đồ nhiệt độ I2S

Âm thanh truyền trên bus I2S là một sóng hình sin đơn giản có biên độ và tần số được thay đổi dựa trên giá trị của chiết áp.

Mã số

Mã để giao tiếp Theremin với Arduino MKRZero, chiết áp 2 thanh trượt & DAC I2S được đưa ra bên dưới.

#include

const int maxFrequency = 5000; // tần suất tạo tối đa
const int minFrequency = 220; // tần suất tạo tối thiểu
const int maxVolume = 100; // âm lượng tối đa của tần số được tạo
const int minVolume = 0; // âm lượng tối thiểu của tần số được tạo
const int sampleRate = 44100; // tốc độ lấy mẫu của tần suất được tạo
const int wavSize = 256; // kích thước bộ đệm
sin ngắn [wavSize]; // bộ đệm trong đó các giá trị sin được lưu trữ
const int tần sốPin = A0; // chân kết nối với nồi xác định tần số của tín hiệu
const int biên độPin = A1; // chân kết nối với nồi xác định biên độ của tín hiệu
nút const int = 6; // chân kết nối với nút điều khiển để hiển thị tần số

void setup ()
{

Serial.begin (9600); // cấu hình cổng nối tiếp
// Khởi tạo bộ phát I2S.
if (! I2S.begin (I2S_PHILIPS_MODE, sampleRate, 16)) {
Serial.println (“Không thể khởi tạo I2S!”);

trong khi (1);
}

createSine (); // điền vào bộ đệm với các giá trị sin
pinMode (nút, INPUT_PULLUP); // đặt chốt nút vào pullup đầu vào

}
void loop () {

if (digitalRead (button) == LOW)

{

float frequency = map (analogRead (frequencyPin), 0, 1023, minFrequency, maxFrequency); // tần suất bản đồ
int biên độ = bản đồ (analogRead (biên độ), 0, 1023, minVolume, maxVolume); // biên độ bản đồ
playWave (tần số, 0,1, biên độ); // phát âm thanh
// in các giá trị trên serial
Serial.print (“Tần số =“);
Serial.println (tần số);
Serial.print (“Biên độ =“);
Serial.println (biên độ);

}

}
void createSine () {
for (int i = 0; i
sine [i] = ushort (float (100) * sin (2.0 * PI * (1.0 / wavSize) * i)); // 100 được sử dụng để không có số nhỏ
}
}
void playWave (tần số float, số giây float, biên độ int) {
// Phát lại bộ đệm dạng sóng được cung cấp cho phần đã chỉ định
// lượng giây.
// Trước tiên hãy tính xem có bao nhiêu mẫu cần phát lại để chạy
// cho lượng giây mong muốn.

unsigned int iterations = seconds * sampleRate;

// Sau đó tính 'tốc độ' mà chúng ta di chuyển qua sóng
// đệm dựa trên tần số của âm được phát.

float delta = (tần số * wavSize) / float (sampleRate);

// Bây giờ lặp qua tất cả các mẫu và chơi chúng, tính toán
// vị trí trong bộ đệm sóng cho từng thời điểm.

for (unsigned int i = 0; i
short pos = (unsigned int) (i * delta)% wavSize;
mẫu ngắn = biên độ * sine [pos];

// Sao chép mẫu để mẫu được gửi đến cả kênh trái và phải.
// Có thứ tự là kênh phải, kênh trái nếu bạn muốn viết
// âm thanh nổi.

while (I2S.availableForWrite () <2);
I2S.write (mẫu);
I2S.write (mẫu);

}
}

Sự khác biệt giữa I2C và I2S Protocol

Sự khác biệt giữa I2C và I2S Protocol bao gồm những điều sau đây.

2C

I2S

Các Giao thức I2C là viết tắt của giao thức bus liên IC I2S là viết tắt của giao thức Inter-IC Sound .
Nó chủ yếu được sử dụng để chạy tín hiệu giữa các mạch tích hợp được đặt trên một PCB tương tự. Nó được sử dụng để kết nối các thiết bị âm thanh kỹ thuật số.
Nó sử dụng hai dòng giữa một số chủ & nô lệ như SDA & SCL . Nó sử dụng ba dòng WS, SCK & SD.
Nó hỗ trợ đa chủ & đa nô lệ. Nó hỗ trợ một tổng thể duy nhất.
Giao thức này hỗ trợ kéo giãn CLK. Giao thức này không có kéo dài CLK.
I2C bao gồm các bit bắt đầu và dừng bổ sung. I2S không bao gồm bất kỳ bit bắt đầu và dừng nào.

Thuận lợi

Các ưu điểm của bus I2S bao gồm những điều sau đây.

  • I2S sử dụng các đường dữ liệu nối tiếp và CLK riêng biệt. Vì vậy, nó có thiết kế bộ thu rất đơn giản so với các hệ thống không đồng bộ.
  • Nó là một thiết bị chính duy nhất nên không có vấn đề gì với việc đồng bộ hóa dữ liệu.
  • Micrô dựa trên I2S o / p không cần mặt trước tương tự nhưng được sử dụng trong micrô không dây bằng cách sử dụng bộ phát kỹ thuật số. Bằng cách sử dụng điều này, bạn có thể có một kết nối kỹ thuật số hoàn toàn giữa bộ phát và bộ chuyển đổi.

Nhược điểm

Các nhược điểm của bus I2S bao gồm những điều sau đây.

  • I2S không được đề xuất để truyền dữ liệu qua cáp.
  • I2S không được hỗ trợ trong các ứng dụng cấp cao.
  • Giao thức này có sự cố đồng bộ hóa giữa ba đường tín hiệu được nhận thấy ở tốc độ bit và tần số lấy mẫu cao. Vì vậy, vấn đề này chủ yếu xảy ra do sự thay đổi của độ trễ lan truyền giữa các dòng đồng hồ và dòng dữ liệu.
  • I2S không bao gồm cơ chế phát hiện lỗi, vì vậy nó có thể gây ra lỗi trong quá trình giải mã dữ liệu.
  • Nó chủ yếu được sử dụng cho giao tiếp giữa các vi mạch trên một PCB tương tự.
  • Không có đầu nối & cáp kết nối điển hình nào cho I2S, vì vậy các nhà thiết kế khác nhau sử dụng các đầu nối khác nhau.

Các ứng dụng

Các các ứng dụng của giao thức I2S bao gồm những điều sau đây.

  • I2S được sử dụng để kết nối các thiết bị âm thanh kỹ thuật số.
  • Giao thức này được sử dụng rộng rãi trong việc truyền dữ liệu âm thanh từ DSP hoặc vi điều khiển sang codec âm thanh để phát âm thanh.
  • Ban đầu, giao diện I2S được sử dụng trong các thiết kế đầu đĩa CD. Bây giờ, nó có thể được tìm thấy nơi dữ liệu âm thanh kỹ thuật số đang được gửi giữa các IC.
  • I2S được sử dụng trong DSP, ADC âm thanh, DAC, vi điều khiển, bộ chuyển đổi tốc độ mẫu, v.v.
  • I2S được thiết kế đặc biệt để sử dụng giữa các mạch tích hợp để giao tiếp dữ liệu âm thanh kỹ thuật số.
  • Giao thức này đóng một vai trò quan trọng trong việc kết nối vi điều khiển và các thiết bị ngoại vi của nó khi I2S tập trung vào việc truyền dữ liệu âm thanh giữa các thiết bị âm thanh kỹ thuật số.

Vì vậy, đây là tất cả về một cái nhìn tổng quan về Đặc tả giao thức I2S trong đó bao gồm hoạt động, sự khác biệt và các ứng dụng của nó. I²S là giao thức nối tiếp đồng bộ 3 dây được sử dụng để truyền âm thanh nổi kỹ thuật số giữa hai mạch tích hợp. Các Trình phân tích giao thức I2S là một bộ giải mã tín hiệu bao gồm tất cả các Trình phân tích Logic DigiView. Phần mềm DigiView này chỉ đơn giản là cung cấp khả năng tìm kiếm, điều hướng, xuất, đo lường, vẽ và in cho tất cả các loại tín hiệu. Đây là một câu hỏi dành cho bạn, giao thức I3C là gì?