|
|
  |
выбор протокола |
|
|
|
Sep 6 2005, 10:22
|
Частый гость
 
Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429

|
Цитата(Old1 @ Sep 6 2005, 11:30) Цитата(Karl @ Sep 6 2005, 07:56) Необходимо связать два контроллера для обмена данными. Обмениваться решил по UART. Контроллеры находятся на одной плате. Вопрос: какой протокол обмена лучше выбрать? Передачу и прием должен инициировать мастер. Хотелось бы использовать что-то типа протокола MODBUS, но попроще. Если все находится на одной плате, почему бы не использовать SPI? Он как раз и разработан для высокоскоростной синхронной передачи данных (на небольшие расстояния)... Против SPI ничего не имею. Но протокол хотелось взять какой - нибудь стандартный. MODBUS у меня уже реализован.
|
|
|
|
|
Sep 6 2005, 20:57
|
Участник

Группа: Validating
Сообщений: 18
Регистрация: 3-09-05
Пользователь №: 8 208

|
Prosto beri UART. I vsio. Vozmi 9-yj bit dlia sinchronizaciji paketov.. SPI tozhe ne ploxo. Poka toljko 2 CPU na platie, mozesh daze nestandartnyj skorostj UART'a vziatj, naprimier UBRR=1...
|
|
|
|
|
Sep 7 2005, 08:15
|

Шаман
     
Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221

|
SPI хорош для скоростной коммуникации МК с неМК, например с EEPROM, DataFlash, ADC, DAC, ets... т. к. мастер принудительно выгребает данные у слейва вне зависимости от их готовности. Приходится в этом случае изощряться с дополнительными сигналами для квитирования. Для межпроцессорного взаимодействия в этом случае более подходят UART (USART), I2C, 1Wire. Кстати, реализация MODBUS возможна на любом из этих интерфейсов.
|
|
|
|
|
Sep 7 2005, 19:24
|
Знающий
   
Группа: Свой
Сообщений: 526
Регистрация: 5-08-05
Пользователь №: 7 390

|
Цитата(IgorKossak @ Sep 7 2005, 11:15) SPI хорош для скоростной коммуникации МК с неМК, например с EEPROM, DataFlash, ADC, DAC, ets... т. к. мастер принудительно выгребает данные у слейва вне зависимости от их готовности. Приходится в этом случае изощряться с дополнительными сигналами для квитирования. Для межпроцессорного взаимодействия в этом случае более подходят UART (USART), I2C, 1Wire. Кстати, реализация MODBUS возможна на любом из этих интерфейсов. В принципе не очень понятно, чем с точки зрения SPI, отличается микроконтроллер в режиме слэйв от например ADC. В любом случае - придется делать полинг готовности устройства: просто в первом случае будем принимать тот же байт, что и посылаем, а во втором ожидать в принятом байте условия конца преобразования. Чтобы определить начало кадра от слэйва достаточно, например, чтобы символы синхронизации в режиме слэйв и в режиме мастер отличались. Я конечно согласен, что в SPI AVR нет FIFO, но обмен между процессорами сделать можно (и делают.) А вообще вопрос не правильно поставлен, хотябы потому что неизвестны ни характер данных, ни размер пакетов, ни требуемая пропускная способность интерфейса, уже не говоря о ресурсах используемых микроконтроллеров. В т.ч. непонятно, достаточно ли будет полудуплексного протокола или нужен дуплекс (тогда например I2C и 1Wire не применимы в принципе). Хотя бы для начала с этим бы определиться.
|
|
|
|
|
Sep 8 2005, 03:47
|
Частый гость
 
Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429

|
Цитата(psL @ Sep 8 2005, 00:24) А вообще вопрос не правильно поставлен, хотябы потому что неизвестны ни характер данных, ни размер пакетов, ни требуемая пропускная способность интерфейса, уже не говоря о ресурсах используемых микроконтроллеров. В т.ч. непонятно, достаточно ли будет полудуплексного протокола или нужен дуплекс (тогда например I2C и 1Wire не применимы в принципе). Хотя бы для начала с этим бы определиться. Вообще - то я не интерфейс выбираю, а протокол. Повторю еще раз. Нужно что-то типа МОДБАС. Но упрощенный, для обмена между двумя контроллерами.
|
|
|
|
|
Sep 8 2005, 05:41
|

Профессионал
    
Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264

|
Цитата(Karl @ Sep 8 2005, 07:47) Цитата(psL @ Sep 8 2005, 00:24) А вообще вопрос не правильно поставлен, хотябы потому что неизвестны ни характер данных, ни размер пакетов, ни требуемая пропускная способность интерфейса, уже не говоря о ресурсах используемых микроконтроллеров. В т.ч. непонятно, достаточно ли будет полудуплексного протокола или нужен дуплекс (тогда например I2C и 1Wire не применимы в принципе). Хотя бы для начала с этим бы определиться. Вообще - то я не интерфейс выбираю, а протокол. Повторю еще раз. Нужно что-то типа МОДБАС. Но упрощенный, для обмена между двумя контроллерами. Да придумайте, свой! Пусть займет немного времени, но зато Вы не будете ничем ограничены и максимально сможете адаприровать все требования обмена под свою систему. Все это же происходит между двумя контроллерами ('их личное дело'), а не с 'внешним миром'.
--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
|
|
|
|
|
Sep 8 2005, 07:10
|
Частый гость
 
Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429

|
Цитата(BVU @ Sep 8 2005, 10:41) Цитата(Karl @ Sep 8 2005, 07:47) Цитата(psL @ Sep 8 2005, 00:24) А вообще вопрос не правильно поставлен, хотябы потому что неизвестны ни характер данных, ни размер пакетов, ни требуемая пропускная способность интерфейса, уже не говоря о ресурсах используемых микроконтроллеров. В т.ч. непонятно, достаточно ли будет полудуплексного протокола или нужен дуплекс (тогда например I2C и 1Wire не применимы в принципе). Хотя бы для начала с этим бы определиться. Вообще - то я не интерфейс выбираю, а протокол. Повторю еще раз. Нужно что-то типа МОДБАС. Но упрощенный, для обмена между двумя контроллерами. Да придумайте, свой! Пусть займет немного времени, но зато Вы не будете ничем ограничены и максимально сможете адаприровать все требования обмена под свою систему. Все это же происходит между двумя контроллерами ('их личное дело'), а не с 'внешним миром'.  Уже придумал. И почти реализовал.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|