Стандартных не знаю. Делается примерно так: а) приемник постоянно включен, т.е. он принимает, кроме чужих, ещё и свою передачу
б) организуется постоянный контроль (независимо от UART) ноги RХ приёмника на 0 и переход ^\_. (Можно прерыванием, можно по опросу, но чаще, чем длительность одного бита).
в) генерируются два случайных числа R1, R2 (если есть ID, то из ID, если ADC - из ADC, итп)
г) после всех инициализаций, если RX=1, запускаем задержку R1. Если RX = 0 (во время счёта задержки тоже) - ждём до момента RX=1 и делаем задержку заново
д) по окончании задержки, если RX продолжает =1, передаём байт R2
е) смотрим, что приняли.
Если принятый R2 <> переданный R2 - т.е. коллизия (или помеха). Запускаем процесс заново со сменой R1 и R2.
Если принятый R2 == переданный R2 - коллизии скорее всего нет, но для верности запускаем процесс повторно со сменой R2 уже без задержки. Если успешно - то я Мастер. Иначе - начинаем всё сначала..
Примечание - R1 должно быть > длительности 2 байтов с дискретой не менее длительности бита. Тогда большинство девайсов от голосования отказываются
Как-то так...