Почти добил обновление прошивки "FX3U"
Sep. 26th, 2024 05:54 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Код на вражеском гитхабе.
Позже выложу описание протокола. Пока вкратце, что умеет:
- работа с RS-232 (текстовый протокол), RS-485 (modbus-rtu) и CAN (мой "стандартный" протокол);
- возможность при изменении состояния дискретных входов отправлять по CAN текущее состояние;
- возможность связать несколько устройств так, что одно будет по CAN и/или modbus (но лишь в случае если оно — господин шины) слать команду с нужным идентификатором (или 0 - широковещательную), чтобы в соответствии с изменением входов щелкали релюшки.
В остальном все как и было раньше.
Код еще не совсем закончен, т.к. обнаружилась странная ошибка с CAN (кстати, она есть и на USB-CAN устройствах, но там проявляется лишь на очень больших скоростях): если выводить данные во время приема, то как только выведен заполненный до конца буфер, происходит зависание и watchdog через 2 секунды перезагружает МК. Я уже даже в обработчики прерываний ошибок CAN-шины воткнул отключение CAN — бесполезно! Т.е. нужно подключать отладчик, отключать watchdog и, когда МК перейдет в hardfault_handler, посмотреть в стеке адрес возврата и по нему попытаться определить, на какой последней инструкции возник косяк. Но вот проблема: здесь нога отладчика используется для управления DE преобразователя уровней RS-485. Похоже, придется отключить на время отладки 485 и попытаться таки понять, что за НËХ!
Позже выложу описание протокола. Пока вкратце, что умеет:
- работа с RS-232 (текстовый протокол), RS-485 (modbus-rtu) и CAN (мой "стандартный" протокол);
- возможность при изменении состояния дискретных входов отправлять по CAN текущее состояние;
- возможность связать несколько устройств так, что одно будет по CAN и/или modbus (но лишь в случае если оно — господин шины) слать команду с нужным идентификатором (или 0 - широковещательную), чтобы в соответствии с изменением входов щелкали релюшки.
В остальном все как и было раньше.
Код еще не совсем закончен, т.к. обнаружилась странная ошибка с CAN (кстати, она есть и на USB-CAN устройствах, но там проявляется лишь на очень больших скоростях): если выводить данные во время приема, то как только выведен заполненный до конца буфер, происходит зависание и watchdog через 2 секунды перезагружает МК. Я уже даже в обработчики прерываний ошибок CAN-шины воткнул отключение CAN — бесполезно! Т.е. нужно подключать отладчик, отключать watchdog и, когда МК перейдет в hardfault_handler, посмотреть в стеке адрес возврата и по нему попытаться определить, на какой последней инструкции возник косяк. Но вот проблема: здесь нога отладчика используется для управления DE преобразователя уровней RS-485. Похоже, придется отключить на время отладки 485 и попытаться таки понять, что за НËХ!