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

Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.