Có quy tắc nào để xác định ai sẽ là nô lệ / chủ nhân [I 2 C] không?
Đúng. Chỉ I 2 C bậc thầy có thể bắt đầu một truyền. Tôi 2 nô lệ C không thể cho bạn biết về một cái gì đó, cho đến khi nó được chủ nhân thăm dò tiếp theo (trừ khi bạn thêm các tín hiệu ngắt bổ sung, làm tăng độ phức tạp của hệ thống tổng thể).
Bỏ qua tính năng (hiếm khi được sử dụng) để thiết bị chuyển đổi giữa làm chủ và nô lệ, điều này có nghĩa là chủ I 2 C phải có đủ kiến thức về hệ thống tổng thể , để biết cách giao tiếp với tất cả I 2 C nô lệ trên xe buýt đó.
Câu hỏi nào tôi nên tự hỏi mình để đưa ra lựa chọn tốt? (nói chung, không dành cho hệ thống cụ thể này)
Hãy suy nghĩ về MCU nào trong hệ thống của bạn biết:
- hầu hết về trạng thái hệ thống tổng thể, và do đó có thể quyết định khi nào gửi lệnh I 2 C cho nô lệ;
- mà các lệnh I 2 C cần được gửi đến từng nô lệ;
- dữ liệu nào cần được thu thập từ mỗi nô lệ I 2 C;
- mà các thiết bị I 2 C hoàn toàn đáp ứng các lệnh đến (điều này sẽ áp dụng cho MCU "S1" của bạn - có vẻ như rõ ràng rằng chúng phù hợp nhất để trở thành nô lệ);
Không phân biệt mà MCU sẽ là I 2 C tổng thể, bạn cần phải thiết kế kiến trúc hệ thống tổng thể và cân nhắc mà các lệnh cần phải được gửi đến mỗi thiết bị, và làm thế nào một cách nhanh chóng bất kỳ phản ứng cần phải được nhận. Cố gắng thiết kế một hệ thống có "chủ" rõ ràng và biết tất cả trạng thái hệ thống, và sau đó nó có thể là I 2 C.
Bạn đã nói:
S3 là trung tâm của hệ thống nhưng mặt khác, S2 có thể gửi nhiều tin nhắn hơn S3.
Không rõ ai "S2" đang gửi tin nhắn đến . Có cần phải chủ động gửi tin nhắn cho bất cứ ai ? Hoặc "S2" có thể được thăm dò bởi "S3" với tư cách là chủ nhân I 2 C, để nhận bất kỳ cảm biến nào và thông tin chuyển đổi "S2" thu thập được không? Nếu "S2" có thể được thăm dò bởi "S3" thì trên cơ sở mô tả, có vẻ như rõ ràng rằng "S3" MCU có thể là chủ nhân I 2 C.
Tôi thận trọng về việc thêm một MCU khác (hãy gọi nó là "S10") để trở thành bậc thầy I 2 C. Đó là bởi vì có vẻ như một MCU "S10" sẽ cần thực hiện nhiều cuộc bỏ phiếu, chỉ để thu thập kiến thức trạng thái hệ thống tổng thể mà tất cả (?) Đã biết bởi "S3". Điều đó có vẻ như trùng lặp không cần thiết.
Do đó, trừ khi "S3" không thể thực hiện công việc do đạt đến giới hạn về không gian RAM, không gian Flash hoặc chu kỳ CPU, v.v., có thể sẽ ít phức tạp hơn khi "S3" điều khiển hệ thống bằng cách làm chủ I 2 C, thay vì thêm bộ điều khiển "S10" bổ sung.
Mặt khác, nếu bạn không quan tâm đến sự phức tạp bổ sung, việc thêm bộ điều khiển "S10" tổng thể sẽ tăng tính mô đun (phân đoạn) của hệ thống, vì "S3" chỉ có Bluetooth và âm thanh - không có gì khác. Điều này có thể cho phép thêm linh hoạt để thêm các tính năng mới (không lường trước) / MCU bổ sung trong tương lai mà không cần thay đổi mã trong "S3".