Была одна идея, когда строил большие сети на RS485, но, как говорится "тяму не хватило".
А именно. Имеем на каждой плате серийник (как правило большой), из него нужно получить сетевой номер (маленький, но уникальный). Например, 48-бит серийник, а в сети 100 устройств.
Мастер формирует основание полинома и отдает его в сеть, а слэйвы по этому основанию считают, например, CRC-8 от своего серийника и считают это своим сетевым адресом. Конечно они могут совпасть, тут нужно выбирать функцию.
Потом, мастер начинает опрос (256 раз), а слэвы в ответ шлют свои серийники (вот и пошла возможность коллизии), но от устройств с одинаковым сетевым адресом идет гарантированно разный ответ, а от него можно считать CRC (адрес устройства) и если отвечают более одного, то он не должен сходится. А потом уже дело техники. Приборам с такими то адресами пересчитать CRC с другим основанием, но не попадая в уже розданый диапазон.
В общем, это только идея, возможно бредовая, сам ее реализовывать не стал. Сначала хватало DIPSWITH на приборах, а потом, пришел CAN и 485-й попросту был забыт.
Цитата
Кроме того, в CAN реализовать искомое по-моему вполне реально.
Но дорогой он, поэтому задача - RS485.
Стоимость физического уровня почти одинаковая.
ADM485 около $1
http://www.argussoft.ru/search/?area=catal...85&options=PCA82C250 то же самое.
http://www.mt-system.ru/index.php?store_se...N4,115&id=5В качестве контроллера можно применять LPC2109 (120 руб в розницу) в него CAN встроен.
http://www.mt-system.ru/index.php?store_se...D64/01&id=5Правда, не зная вашей задачи рекомендовать контроллер немного не корректно, но идею я думаю вы поймете.