Висящий SPI на ATMega32

Как дорогие втыкатели могут помнить из предыдущих статей, все изделия Мегакорпорации проходят термические (климатические и другие) испытания. Делается это для соответствия нашей продукции промышленным и военным стандартам и ТУ.

Плата панели

Плата панели

Также из предыдущих статей можно вспомнить о тепловых испытаниях панелей одной КСУ. Сегодня КБ13 пришлось принять участие в этом процессе.

Как выяснилось, страдальцы из КБ14 два месяца пытались вывести панель на заявленный режим работы и обеспечить по температуре некоторый запас — т.е. обеспечить работу платы при температуре 80 градусов. Они занимались бесполезной пайкой/перепайкой, разводкой/переразводкой, заменой комплектующих и усилением линий питания, прежде чем понять всю тяжесть своих грехов и обратить мольбы в сторону КБ13.

Божественная помощь не замедлила воспоследовать и выслушать суть проблемы.

Новая термокамера. Панелька инсайд.

Новая термокамера. Панелька инсайд.

Лицевая панель КСУ представляет собой кусок текстолита, на котором стоят сотня трехцветных светодиодов, пара многосегментных (14ти) индикаторов, кнопки и контроллер, который управляет этим хозяйством через сдвиговые регистры и общается с внешним миром по RS232.
Заказана эта вещь была у стороннего разработчика вместе с прошивкой контроллера.
На температуре 70 с копейками градусов панель жестко висла — все диоды и сегменты замирали, сдыхал рс. Вотчдог не помогал, ручной сброс питания тоже — при нагреве все стояло.

Изучение исходника прошивки, ее работы и принципиальной схемы изделия направило специалистов в сторону SPI, а точнее, показало следующее.

  • Управление защелками идет по интерфейсу SPI — все 20 с лишним защелок просто забиваются нужными битами и разом выводятся.
  • Программа (зависшей панели) стоит на строке while( !(SPSR&(1< - это ожидание флага окончания передачи.
  • 44 ножка процессора, она же PB4/SS, (а) висит в воздухе, (б) нигде в прошивке не упоминается ни сном, ни духом.

Очевидно, что процессор-то, в принципе, продолжал работать, но некий баг не давал ему получить флаг SPIF и пойти дальше.
Между тем, упомянутая 44 ножка является частью SPI-интерфейса и оставлять ее в столь невнятном состоянии никак нельзя - либо пользуемся, либо отрубаем.
Программный вариант был естественно один - настроить PB4 на выход, что ведет к игнору этой ноги SPI-аем.

Т.е. в коде инициализации и стартовой настройки IO при использовании SPI без SS обязательно должно присутствовать нечто вроде:

DDRB    |= (1<<4);

Иначе - неожиданный ненаходимый баг может резко подорвать ваше душевное здоровье.

После небольшого вмешательства в прошивку и правильной настройки SPI, панели глючить перестали и стабильно отработали положенные 4 часа даже на температуре 85 градусов.

Было:

    PORTB   = (1<

Стало:

    PORTB   = (1<

Мораль: даташит читать надо. Будьте внимательны.

Ассистировали святому вмешательству раб Божий Бобах (КБ14) и раб Божий Джексон (производственные подземелья).

Похожий бред:

Висящий SPI на ATMega32: 2 комментария

  1. КБ13 слишком много берет на себя, о боги вы сразу смотрели панельку и выяснили в чем висюк, но не кто не хотел этим заниматься…

    • Боге занимались нашей новой разработкой, а не расходовали запасы энергии на земные проблемэ… но вскоре боге нашли все остальные проблемэ панельки и все стало хорошо и это прекрасно.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Protected by WP Anti Spam