ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
22 июля
1273622
Nikolay_Po (06.01.2023 16:51, просмотров: 2895)
Не используйте Arduino IDE! Всё замечательно, пока не нужно ничего особенного. Всё работает, сразу, очень удобно, библиотеки готовы. Но только шаг в сторону - микропотребление, например, - всё! Жопа! 

Вот, спрашивал у меня сын, как работают беспроводные замки, автосигнализации и ключи. Спрашивал, какие уязвимости, как можно вскрыть систему по радио, зачем брелоки делают с двухсторонней связью? Что такое мастер-ключ?

И решили сделать свой ключ (ну и замок, соответственно). Чип контроллера, atMega328P, определился наличием модулей Arduino Nano. В качестве инструментов, было предложено на выбор: MPLAB X IDE и Arduino IDE.

Сын выбрал Arduino, так как я не смог ему показать, как быстро начать работу с NRF24L01+ в MPLAB, зато он сам смог мне показать, как работать с NRF24L01+ из Arduino IDE на C++.

Ладно, с инструментарием определились. Было составлено предварительное ТЗ на работу замка:


- 11 лет работы без повтора кода в эфире. Текуший код хранится в EEPROM.

- Цифровая подпись команды ключом с уникальным кодом по алгоритму SHA256.

- Условия отработки команды:

Успешная проверка нормера кода (номер может быть только выше предыдущего, исполненного); Успешная проверка цифровой подписи команды и текущего кода закрытым ключом.

- Самосинхронизация нормера кода замка и ключа на случай замены ключа (закрытый ключ только в прошивке).

- Срок жизни аккумулятора в режиме ожидания не менее 2 месяцев.


Замечательно. Программы ключа и замка написаны в Arduino IDE. Отладочная информация с обоих устройств выводится по UART. Всё готово для переноса "в железо", кроме оптимизации энергопотребления и спящего режима МК. Решили отлаживать потребление уже на готовом железе.

Наступили выходные. Решено было построить "конструкцию выходного дня". См. фото ключа. Замок пока в виде россыпи модулей Arduino, пока отлаживаем ключ. Изготовил наплевательски, классической ЛУТ. На удивление, спаялось, замыкания и обрывы удалось устранить без нервотрёпки, легко и непринуждённо.

Питание - аккумулятор LIR2466 (нашёл во дворе промзоны, где налаживали дозаторы отечественных РБУ).

Не без сложностей, добились потребления Mega328P 110нА в спящем режиме. Стабилизатор SEPIC порадовал - в режиме покоя (EN низкий уровень) +40нА к микроконтроллеру. Итого, спячка 150нА. Работа - до 25мА@2.75В на излёте заряда аккумулятора.


Так вот, проблемы начались с Arduino IDE и её библиотеками при попытке внедрить спящий режим.

Оказалось, само ядро к этому не приспособлено. Нашли, как восстановить работу таймера. Вроде разобрались с восстановлением работы SPI. Но, после сна, виснет код библиотеки NRF24. Всё объектно-ориентированное, концов - не найти.

Предложил переписать полностью на свой код, и собрать в MPLAB X. Благо, SPI у Mega328P примитивный. Сын пока не согласился. Копает Arduino, отлаживает с выводом UART. Посмотрим, чем закончится.





https://www.eemb.com/public/image/download/LIR2466.pdf