Apakah ada aturan untuk menentukan siapa yang akan menjadi budak / tuan [I 2 C]?
Iya. Hanya master I 2 C yang dapat memulai transmisi. Budak I 2 C tidak dapat memberi tahu Anda tentang sesuatu, sampai ia disurvei oleh master (kecuali jika Anda menambahkan sinyal interupsi ekstra, yang meningkatkan kompleksitas sistem secara keseluruhan).
Mengabaikan fitur (jarang digunakan) untuk perangkat untuk beralih antara menjadi master dan slave, ini berarti bahwa master I 2 C harus memiliki pengetahuan yang cukup tentang keseluruhan sistem , untuk mengetahui cara berkomunikasi dengan semua I 2 C budak di bus itu.
Pertanyaan apa yang harus saya tanyakan pada diri saya untuk membuat pilihan yang baik? (secara umum, bukan untuk sistem khusus ini)
Pikirkan MCU mana di sistem Anda yang tahu:
- kebanyakan tentang keadaan sistem secara keseluruhan, dan oleh karena itu dapat memutuskan kapan harus mengirim perintah I 2 C ke slave;
- perintah I 2 C perlu dikirim ke setiap budak;
- data apa yang perlu dikumpulkan dari setiap budak I 2 C;
- perangkat I 2 C yang murni menanggapi perintah yang masuk (ini akan berlaku untuk MCU "S1" Anda - tampak jelas bahwa mereka paling cocok untuk menjadi budak);
Terlepas dari MCU mana yang akan menjadi master I 2 C, Anda perlu merancang arsitektur sistem secara keseluruhan dan mempertimbangkan perintah mana yang perlu dikirim ke setiap perangkat, dan seberapa cepat respons apa pun perlu diterima. Cobalah untuk mendesain sistem yang memang memiliki "master" yang jelas dan mengetahui semua kondisi sistem, dan kemudian itu bisa menjadi perangkat master I 2 C juga.
Kamu berkata:
S3 adalah pusat dari sistem tetapi di sisi lain, S2 dapat mengirim lebih banyak pesan daripada S3.
Hal ini tidak jelas siapa "S2" mengirimkan pesan ke . Apakah perlu mengirim pesan secara aktif kepada siapa pun ? Atau bisakah "S2" disurvei oleh "S3" sebagai master I 2 C, untuk menerima sensor apa pun dan mengalihkan informasi yang "S2" kumpulkan? Jika "S2" dapat disurvei oleh "S3" maka, berdasarkan deskripsi, tampak jelas bahwa "S3" MCU bisa menjadi master I 2 C.
Saya berhati-hati tentang menambahkan MCU lain (sebut saja "S10") sebagai master I 2 C. Itu karena tampaknya bahwa MCU "S10" perlu melakukan banyak polling, hanya untuk mengumpulkan pengetahuan status sistem keseluruhan yang semuanya (?) Sudah dikenal oleh "S3". Sepertinya itu duplikasi yang tidak perlu.
Oleh karena itu, kecuali "S3" tidak dapat melakukan pekerjaan karena mencapai batas ruang RAM, ruang Flash, atau siklus CPU dll. Mungkin lebih mudah untuk "S3" mengendalikan sistem dengan menjadikannya master 2 C, daripada menambahkan pengontrol "S10" tambahan.
Di sisi lain, jika Anda tidak keberatan dengan kompleksitas tambahan, menambahkan pengontrol "S10" keseluruhan meningkatkan modularitas (segmentasi) sistem, karena "S3" maka hanya Bluetooth dan audio - tidak ada yang lain. Ini dapat memungkinkan fleksibilitas ekstra untuk menambahkan fitur baru (tak terduga) / MCU tambahan di masa depan, tanpa perlu mengubah kode dalam "S3".