А я вот никак не соберусь («работает — не трогай!») переписать у себя I2C всё начисто на мультимастер. Вот у кого что возникло — посылает по I2C на адрес хоста (ATmega328).Jack_A писал(а):Получив запрос, ведущий по UART (SPI) посылает широковещательный запрос : "Кто меня звал ?"
Если возникло «почти одновремённо», то арбитраж разрулит и просто сообщение от второго немного задержится. С учётом нечастости во времени таких вещей шина только разгрузится. И без прерываний ненужный поллинг уберётся, точнее, будет перывание по приходу чего-то на I2C (в пакете — обратный адрес пославшего).
Если хосту что-то конкретное захотелось записать в устройство — посылает запись.
Если что-то нужно прочитать (а оно может не сразу быть готово! сейчас с одним мастером и поллингом приходится записать команду, после чего читать до получения результата, лишняя работа на шине), то хост просто шлёт в устройство «дай мне вон то», когда оно будет готово, устройство запишет в хост ответ (со своим адресом в пакете для разбора).
Т.е. операция чтения из устройства распадается на две операции записи из хоста в устройство и и з устройства в хост, между ними шина свободна.
Это всё потребует немного больше ОЗУ в хосте (есть лишнее, так что всё нормально), но упростит общую логику.
Но, как уже сказал, «работает — не трогай!»


