‮Сдвиг по фазе (kincajou) wrote,
‮Сдвиг по фазе
kincajou

Орешек знаний твёрд в неожиданных местах

Возился с платкой на AT90CAN128. Чип уже исследован вдоль и поперёк, казалось бы, никаких сюрпризов. Библиотека для CAN отлажена уже давно и с тех пор не нареканий уже, наверное, год. Пока не нашлось странное...

Дело в том, что этот хитрый интерфейс устроен совсем не так, как привычные для микроконтроллерщиков UART, SPI, I2C и т.п. - он пересылает не байты, а сразу блоки байтов, причём поддержка протокола возложена на аппаратный контроллер. По слухам, существуют и софтварные реализации, но я их никогда не видел и мне они не интересны.

Так вот, приём-передача данных организованы, с одной стороны, непривычно... с другой стороны, довольно изящно и просто. Аналогия такая: если для того, чтобы UART начал передавать байт, ему надо оный байт положить в регистр передатчика, то для CAN надо положить сразу целый кадр в т.н. "почтовый ящик" (mailbox). Это набор регистров, полностью описывающих содержимое кадра - сколько байт, кому, что именно передать. Или всё то же самое, но только для принятого кадра.

Это всё преамбула.. Амбула в том, что AT90CAN128 имеет ровно 15 мейлбоксов. Почему не 16 - не знаю. И я однажды решил, что библиотека будет использовать 8 нижних для приёма, а 7 верхних для передачи данных. И функция, заполняющая регистры, учитывает это: внутренняя переменная, хранящая номер следующего мейлбокса, бегает по кругу - от 7 до 14. Т.е. положили кадр в ящик нумер 7, передвинули переменную на 8. Потом кладём в 8, сдвигаемся до 9.... Дошли до 14 - перещёлкиваем на 7. Ну и так далее. Всё прекрасно работало до сегодняшнего дня.

Я натолкнулся на экземпляр AT90CAN128, в котором мейлбокс 14 не работает вообще. Кладём данные - и всё, модуль CAN перестаёт работать совсем. Яфшоке.

Буду перепаивать, хуле. Но осадочек неприятный остался.
Tags: приключения Электроника
Subscribe

  • Выражайтесь свободнее

    В октябре прошлого года учитель средней школы в пригороде Парижа Самюэль Пати, также показавший своим ученикам карикатуру на Мохаммеда в рамках…

  • Толерантность и равноправие

    Подразделение компании Disney, студия Lucas Film больше не будет сотрудничать с актрисой Джиной Карано, которая снималась в сериале "Мандалорец",…

  • Конечно, они ведь не могут

    "Я все еще не могу поверить, что Дж. К. Роулинг написала роман, который подразумевает, что транслюди могут быть злодеями" Это только белый…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 4 comments