unreal (10.07.2014 09:45, просмотров: 4710)
CAN atmel, протокол обмена между 2-мя устройствами Есть 2-а утсройства М и С которые обмениваются постоянно данными по кан, при том сокрость обмена должна быть как можно быстрее. Сейчас у меня стоит 250кбит, те моя посылка ~150бит должна уйти за 600мкс. Я пробовал сделать, что М посылает запрос С, С на этот запрос отвечает. И елси на все про все уходит меньше 4 мс, то считал что все впорядке, елси же время увеливается больше 4мс, то выдавал ошибку. Ошибки сыпались одна за другой.
Потом я сделал проще, убрал привязку М и С. Т.е. каждый узел выдает своое сообщение один раз в 1мс, независимо от того, что другой делает в это время. И елси каждый из узлов не получил сообщение в течении 3мс, то выдаю ошибку. Ошибки сократились практически до 0-ля. Те меня как бы все утсраивает, но я не могу понять, чем это может быть черевато вдальнейшем? Мониторю состояние шины и вижу что TXBSY, при таком варианте обмена, очень часто занят. Это связано скорее всего с тем, что оба устройства пытаются одновременно передать. Т.е. один раз, примерно в 5-6 секунд, тк нету синхронизации между М и С, наступает такой момнет когда они одновременно шлют друг дргу посылки. Но на мой конечный результат это не влият тк я укладываюсь в 3мс практически без ошибок, а вот как это скажется на линии, и что может произойти из того, что не удалось сразу выявить при отладке?
Ну допустим они одновременно начали передавать, выиграл арбитраж тот у кого адрес в пысылке меньше стоит, да несоклько раз он возможно выскочил из прерывания тк TXBSY был занят на этом все закончится, или можно ждать сюрпризов и надо более детально прорабатывать обмен ?
Ошибки возникают при том разные и AERR FERR SERR BERR примерно по 1-2 штуки за сутки, но на работу приложения и положенное время доставки они не сказываются.
Режим TTC выключил тк само прилжение шлет практически с максимальной скоростью.