Вопрос - возможно ли ПРОГРАММНЫМ путём запретить “мигание” светодиода на D13 во время заливки прошивки?
если сможешь “программно изнасиловать” загрузчик, то видимо да.
первый раз слышу шоб мигал встроенный диод при загрузке, в ожидание загрузки, да видал.
но я старый, может подзабыл чего)
Если есть исходники загрузчика, там гляньте.
Вот, что-то вроде этого, может быть про мигание)). Хотя не факт, что всё так просто
/* toggle LED */
if(ch == 't') {
if(bit_is_set(LED_PIN,LED)) {
LED_PORT &= ~_BV(LED);
putch('1');
} else {
LED_PORT |= _BV(LED);
putch('0');
}
}
void flash_led(uint8_t count)
{
while (count--) {
LED_PORT |= _BV(LED);
_delay_ms(100);
LED_PORT &= ~_BV(LED);
_delay_ms(100);
}
}
Но, согласен с @xDriver -ом, что , скорее, мигает до загрузки
P.S. Код выше - из файла ATmegaBOOT_168.c, (из папки bootloaders\atmega), привёл просто для примера. Какой у вас загрузчик - понятия не имею.
Да откуда ж им быть? Нет конечно.
В том-то и дело, что “во время” всей загрузки прошивки в такт проходящим байтам.
Я бы и не заметил этого, если бы не особенности схемы, в которой D13 используется для включения мелкого реле управления входом НЧ сигнала.
И зачем вообще это сделано, не пойму. Загрузку прекрасно “видно” по светодиодам RX/TX.
Почему нет? Исходный код оптибут лежит на гитхабе
давно игрался, когда занимался разгоном, собрать загрузчик с нужными тебе параметрами и залить, как то так:
make atmega328 AVR_FREQ=16000000L BAUD_RATE=115200 LED=B5 LED_START_FLASHES=0 UART=0
LED=B5 это оно, пин 13, LED_START_FLASHES=0 - отключить
Не проверял, в миникоре без LED загрузчика нет, в крайнем случае переопредели на другой пин (неиспользуемый)
Оказалось среда всё ещё настроена - попробуй:
:107E000001C0C8C0112484B7882361F0982F9A70EC
:107E1000923041F081FF02C097EF94BF282E80E09E
:107E2000A4D0EEC082E08093C00088E18093C100BE
:107E300086E08093C20080E18093C4008EE095D0FC
:107E400093E0E92EDD24D39425E0C22E31E1B32E58
:107E500080D0813451F47DD0182F8DD0113811F09D
:107E600083E001C088E06ED06AC0823411F484E1FE
:107E700003C0853419F485E086D061C0853539F4B6
:107E800068D0C82F66D0D82FCC0FDD1F57C08635DD
:107E900021F484E078D080E0E6CF843609F02DC06C
:107EA00058D057D0F82E55D0A82E00E011E051D070
:107EB000F80181938F01FE12FACF5DD0F5E4AF1285
:107EC00001C0FFCFFE01E7BEE89507B600FCFDCF7D
:107ED000A0E0B1E0FE018D919D910C01D7BEE89527
:107EE00011243296FA12F7CFFE01C7BEE89507B605
:107EF00000FCFDCFB7BEE89522C0843791F429D0AD
:107F000028D0F82E26D0182F36D0153409F4FFCFFC
:107F10008E01F80185918F0115D0FA94F110F9CFF7
:107F20000EC0853739F427D08EE10CD085E90AD010
:107F30008FE099CF813511F488E017D01CD080E113
:107F400001D086CF9091C00095FFFCCF8093C600F2
:107F500008958091C00087FFFCCF8091C00084FD10
:107F600001C0A8958091C6000895E0E6F0E098E190
:107F7000908380830895EDDF803219F088E0F5DF8B
:107F8000FFCF84E1DFCFCF93C82FE3DFC150E9F704
:107F9000CF91F1CFFC010A0167BFE895112407B624
:107FA00000FCFDCF667029F0452B19F481E187BFF5
:047FB000E8950895B3
:027FFE00030876
:0400000300007E007B
:00000001FF
еще раз убеждаюсь, то все твои проблемы из за того, что ты сначала катушку включаешь говоришь, а потом думаешь.
давно на Меге PB5 стал D13?
Долго искать не пришлось
Из коментов в исходнике
/* LED_DATA_FLASH: */
/* Flash LED when transferring data. For boards without */
/* TX or RX LEDs, or for people who like blinky lights. */
``
Вон оно что, Михалыч! Запасной вариант для плат, где нет светодиодов RX/TX.
Мда.. А мне эта фича подкинула сюрприз из стрекочущего как АК реле..
P.S. Ну лан, мне тут ИванИваныч подкинул решение - залить бутлоадер ядра MegaCore.
Говорит, что там эта фича по дефолту отсутствует.
Попробую как программатор будет под руками. Пока нет времени..
Отпишу по результату..
врёт он, оптибут там обычный, а вот urboot не знаю
optiboot_flash_atmega2560_UART0_115200_16000000L_B7_BIGBOOT.hex
а вы знаете можно ли накатить пароль на перепрошивку ?)))
сработает или нет ?
// Инициализация UART
UART_BAUD_RATE_LOW = UART_BAUD_SELECT(BAUDRATE, F_CPU);
UART_CONTROL_REG = (1 << UART_ENABLE_RECEIVER) | (1 << UART_ENABLE_TRANSMITTER);
// ============ ВСТАВИТЬ ЗДЕСЬ ============
#define PASSWORD_ENABLED
#define MAX_ATTEMPTS 3
#ifdef PASSWORD_ENABLED
const char password[] PROGMEM = "1234"; // пароль хранится во flash
char entered[5];
uint8_t attempts = 0;
uint8_t authorized = 0;
// Отправить приглашение
sendchar('P');
sendchar('a');
sendchar('s');
sendchar('s');
sendchar('w');
sendchar('o');
sendchar('r');
sendchar('d');
sendchar(':');
sendchar(' ');
// Ждать пароль
uint8_t i = 0;
while (i < 4) // 4 символа
{
if (Serial_Available())
{
char c = UART_DATA_REG;
sendchar('*'); // вместо ввода показываем звёздочки
entered[i++] = c;
}
}
entered[4] = 0; // завершить строку
sendchar('\r');
sendchar('\n');
// Проверить пароль
uint8_t password_ok = 1;
for (i = 0; i < 4; i++)
{
char pwd_char;
#if (FLASHEND > 0x10000)
pwd_char = pgm_read_byte_far((uint16_t)&password[i]);
#else
pwd_char = pgm_read_byte_near((uint16_t)&password[i]);
#endif
if (entered[i] != pwd_char)
{
password_ok = 0;
break;
}
}
if (!password_ok)
{
sendchar('E');
sendchar('r');
sendchar('r');
sendchar('o');
sendchar('r');
sendchar('!');
sendchar('\r');
sendchar('\n');
_delay_ms(1000);
// Запустить основную программу
boot_rww_enable();
asm volatile("clr r30 \n\t clr r31 \n\t ijmp");
// Сюда никогда не дойдёт
}
// Пароль правильный
sendchar('O');
sendchar('K');
sendchar('\r');
sendchar('\n');
#endif
// ============ КОНЕЦ ВСТАВКИ ============
а что можно еще делать и как изменить боотлоадер ?
если это только будет запрашивать пароль при перезагрузки платы, то как реализовать пароль для смены боотлоадера ?))) и это вообще реально ?
не знаю.
а если мы только пароль будем спрашивать при перезагрузке платы, или при повторной загрузке скетча, можно ли как то на этом поднять бабла ?))) или лучше состояние))) хотя бы по 1 рублю за 1 пароль… но это фиксится будет перепрошивкой боотлоадера…
а пароли одноразовые продавать оптом можно… а как поднять бабла знаете ?)))
по одной монетке… биткойничку
сатоши или акатоши их называют вроде… не помню сколько там 0 после 0.xxxx(вот их как то так называют) наверное дорого… но как заставить нуждаться в покупке паролей ?)))
Какой Данила, какой пароль…
Avr слишком дешманский контроллер и защищать его нет смысла. Тысяча евро стоит прожечь фьюз.
Даже стм32 руткит есть по сливу прошивки из закрытого камня.
Опять вы херней занимаетесь)))
у меня других идей нет)))
после того как у меня выскочило окошко, где на хх ру надо было указать желаемый уровень зп, и я написал что все что у них есть, и я подумаю, а затем дальше одними простыми вопросами о их работе, указал им на их место, мне отказали, и как поднять еще бабла не знаю)))
Перекинуть реле на другой пин, не?

