Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: "Одновременная" передача 10 пакетов в AT90CAN128
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Controller Area Network (CAN)
Sl_
Если в одной в AT90CAN128(передатчике)
- убедиться что предыдущая передача пакета завершена
- записать пакет в Mob
- разрешить ему передачу сразу после записи пакета,
и сразу после этого, не дожидаясь завершения передачи, все тоже самое сделать еще для нескольких Mob, а затем дождаться когда все Mob завершат передачу, то как я понимаю никаких проблем не должно возникнуть.
Они сами начиная с MOb имеющего наименьший идентификатор(или Mob получившего первым разрешение на передачу) должны по очереди выдать свои пакеты(разумеется при наличии приемника). Потери скорости также не должно быть, так как арбитраж адреса осуществляется "на лету". Более того, между передаваемыми пакетами будет минимальный "зазор".

В системе предполагается один AT90CAN128 использовать как передатчик, а другой AT90CAN128 как приемник.Да и наличие других CAN-узлов может лишь увеличить время передачи всех 10 пакетов.

Собственно вопрос.
Такая "одновременная" передача 10 пакетов в AT90CAN128 возможна?
Или я обязан стартовать передачу одного пакета, дождаться завершения передачи и только потом стартовать следующий пакет?
spf
Цитата(Sl_ @ Aug 21 2008, 03:40) *
В системе предполагается один AT90CAN128 использовать как передатчик, а другой AT90CAN128 как приемник.

Т.е. имеется ввиду что используется соединение точка-точка, на шине будет только два CAN-устройства?

Цитата
Да и наличие других CAN-узлов может лишь увеличить время передачи всех 10 пакетов.

При соответствующем распределении адресов увеличения времени передачи всех пакетов не будет. Только время начала выдачи может быть отодвинуто, если на шине кто-то уже передавал во время инициализации передачи 10 пакетов.

Цитата
Такая "одновременная" передача 10 пакетов в AT90CAN128 возможна?
Или я обязан стартовать передачу одного пакета, дождаться завершения передачи и только потом стартовать следующий пакет?

Про это должно быть четко написано в документации на чип wink.gif

Для чего требуется такая жесткая "синхронизация"?
Sl_
Цитата(spf @ Aug 21 2008, 06:46) *
Т.е. имеется ввиду что используется соединение точка-точка, на шине будет только два CAN-устройства?


Да.

Цитата(spf @ Aug 21 2008, 06:46) *
При соответствующем распределении адресов увеличения времени передачи всех пакетов не будет. Только время начала выдачи может быть отодвинуто, если на шине кто-то уже передавал во время инициализации передачи 10 пакетов.


Да, конечно. Полностью согласен.

Цитата(spf @ Aug 21 2008, 06:46) *
Про это должно быть четко написано в документации на чип wink.gif


Вот таки нашел. В описании:

20.5.1.2 Tx Data & Remote Frame
1. Several fields must be initialized before sending:
– Identifier tag (IDT)
– Identifier extension (IDE)
– Remote transmission request (RTRTAG)
– Data length code (DLC)
– Reserved bit(s) tag (RBnTAG)
– Data bytes of message (MSG)
2. The MOb is ready to send a data or a remote frame when the MOb configuration is set
(CONMOB).
3. Then, the CAN channel scans all the MObs in Tx configuration, finds the MOb having the
highest priority and tries to send it.
4. When the transmission is completed the TXOK flag is set (interrupt).
5. All the parameters and data are available in the MOb until a new initialization.

т.е. пункт 3 косвенно подтерждает, что одновременно несколько Mob могут пытаться передавать свой пакет.
Что сообственно, я и пытался выяснить.

Цитата(spf @ Aug 21 2008, 06:46) *
Для чего требуется такая жесткая "синхронизация"?


Просто так проще программно. Запихнул все пакеты, запустил какую нибудь долгоиграющую подпрограмму вычислений, а ВСЕ пакеты из всех Mob сами по своей очереди уходят.
Иначе придется эпизодически отвлекаться на передачу каждого пакета.

Прерывания для CAN использовать не хочу по другим мотивам.
spf
Цитата(Sl_ @ Aug 21 2008, 16:18) *
т.е. пункт 3 косвенно подтерждает, что одновременно несколько Mob могут пытаться передавать свой пакет.
Что сообственно, я и пытался выяснить.

Может все таки они не пытаются одновременно передавать, а осуществляется выбор слота передачи по приоритету ID.
Sl_
Цитата(spf @ Aug 21 2008, 14:32) *
Может все таки они не пытаются одновременно передавать, а осуществляется выбор слота передачи по приоритету ID.


Да. Вы более корректно, чем я, выразились!

Главное резюме, для меня вот в чем.
Можно сделать следующее:
Запихнуть все готовые к данному моменту пакеты в несколько Mob_ов и разрешить передачу. А затем ВСЕ пакеты из всех Mob_ов сами по своей очереди(по приоритету ID, за исключеним(возможно) Mob _а получившего первым разрешение на передачу) уходят. И это без программного вмешательства.
В это время готовим новую порцию данных. Проверяем что все пакеты ушли и опять всю порцию данных раскидываем по нескольким Mob_ам .....

Т.е. не оязательно выпихивать Mob_ы поодиночке.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.