Серия микроконтроллеров STC всегда была известна возможностью загрузки и записи прошивки без использования программатора. Эта возможность реализуется за счет встроенного BootLoader-кода внутри чипа. Код запускается при включении питания микроконтроллера, поэтому STC всегда использовал "холодное" запускание для загрузки.
Однако с появлением STC8 "холодное" запускание стало менее надежным. Это не связано с ошибками программы, а вызвано расширенным диапазоном рабочего напряжения микроконтроллера. У старых 5-вольтовых микроконтроллеров STC напряжение могло снижаться до 3 вольт и восстанавливаться до 5 вольт, чтобы активировать BootLoader. Теперь же STC8 может работать при напряжении всего 1,9 вольта, даже обратный ток через последовательный порт может поддерживать работу микроконтроллера, делая невозможной "холодную" загрузку.
А почему бы вам самим не создать BootLoader? Этот проект поможет вам реализовать свою идею создания BootLoader, если вы понимаете его принцип работы, то сможете легко применять его в продукте!### Преимущества
Но это всё ещё версия Tiny, которая реализует базовую функциональность BootLoader. На её основе можно добавить необходимые компоненты.
Версия KEIL | V9.59.0.0 |
---|---|
C Compiler | V9.59.0.0 |
Ассемблер | V8.2.7.0 |
Линкер | V6.22.2.0 |
Библиотекарь | V4.30.1.0 |
Конвертор HEX | V2.7.0.0 |
DLL CPU | V3.122.0.0 |
DLL Диалог | V2.66.0.0 |
Микроконтроллер STC8A8K64S4A12 использует P0.0 как вход для запуска BootLoader.
Уровень оптимизации | 8 уровень |
---|---|
Область DATA | 28 байт |
Область XDATA | 512 байт |
Область FLASH | 1375 байт |
После получения данных, количество принятых байтов будет отображено на последовательном порту для сравнения. Затем программа автоматически запустится. После этого, достаточно установить ногу BOOT в низкое состояние, чтобы продолжать работу APP.
'!'
.'!'
. Если вместо '!'
будет отправлен другой символ, микроконтроллер считает это ошибочным сигналом связи и переходит в заблокированное состояние. В этом состоянии микроконтроллер больше не принимает данные, и требуется его перезапуск.На строке 9 файла main.c.
#define BOOT_PIN P00 //BOOT пин установлен как P0.0.
Измените макрос BOOT_PIN, чтобы назначить конкретный входной/выходной пин в качестве BOOT пина.
На строке 10 файла main.c.
#define BOOT_RUN_APP 0 //Когда уровень BOOT пина низкий, запускается APP.
Удалите строки с 8 по 10 файла main.c.
/*-----------------------------------------Определение BOOT пина-----------------------------------------*/
#define BOOT_PIN P00 //BOOT пин установлен как P0.0.
#define BOOT_RUN_APP 0 //Когда уровень BOOT пина низкий, запускается APP.
Измените код проверки APP на строках 267–272 файла main.c.
/*------------------------------------------Проверка APP---------------------------------------*/
``````c
jmp_app = (u32) read_boot_addr; // По умолчанию адрес BootLoader передается в адрес APP, чтобы предотвратить случайные переходы.
if ((read_app_flag & PD_APP_OK) == APP_OK) { // Проверьте корректность программы.
jmp_app = (u32) read_app_addr; // Если программа корректна, передайте адрес APP в функцию перехода.
if (BOOT_PIN == BOOT_RUN_APP) { jmp_app(); } // Если уровень BOOT пина позволяет переход к APP, выполните переход.
}
Пример кода предназначен для микросхем с флеш-памятью объемом 64 КБ. Если используется микросхема с флеш-памятью объемом 17 КБ, то потребуется внести изменения в следующие места.#### Изменение адреса сохранения состояния Программа BootLoader хранится в последних 2КБ адресов чипа, а состояние BootLoader сохраняется в последнем секторе этих 2КБ. Поскольку один сектор составляет 512 байт, для микросхемы с флеш-памятью объемом 64КБ начальный адрес будет равен 0xFE00.
#define BOOT_STATUS 0xFE00 // FE00 : состояние области BootLoader
#define BOOT_JMP_ADDR 0xFE01 // FE01~FE02 : адрес перехода программы BootLoader
#define APP_START 0xFE03 // FE03 : начало области APP
#define APP_MAX 5 // APP_MAX : размер области APP в секторах
#define APP_STATUS 0xFE03 // FE03 : состояние области APP
#define APP_SIZE 0xFE04 // FE04~FE05 : размер области APP
#define APP_JMP_ADDR 0xFE06 // FE06~FE07 : адрес области APP
Если требуется изменение, то следует изменить строки с 15 по 22 в main.c. Адреса не обязательно должны быть непрерывными, но важно, чтобы они не пересекались!
Например, если использовать микросхему с флеш-памятью объемом 17КБ, то значение BOOT_STATUS
можно установить как 0x4200. Остальные значения следует корректировать аналогичным образом.
При изменении объема флеш-памяти количество используемых секторов области APP также изменится. Для этого достаточно изменить строку 24 в main.c.
#define DATA_MAX 124 // максимальное значение области APP, единица измерения - секторы. Один сектор составляет 512 байт.
```Если последние 2 КБ адресов используются для BootLoader, то это составляет 4 сектора. В случае микросхемы с флеш-памятью объёма 64 КБ общее число секторов равно 128, поэтому `DATA_MAX` устанавливается в 124.Поэтому при увеличении размера BootLoader или использовании микросхемы с меньшим объемом флеш-памяти (`17 КБ`) значение `DATA_MAX` следует уменьшить в соответствии с реальными условиями.
### Как изменить частоту тактового сигнала
Программа по умолчанию работает на частоте 24 МГц. При необходимости снижения энергопотребления или повышения производительности следует учесть несколько моментов, связанных с тактовым сигналом.
#### Изменение внутреннего RC-генератора
Измените фактическую частоту в программе STC-ISP, затем перезагрузите BootLoader. Перед загрузкой убедитесь, что программа BootLoader была изменена для корректной работы таймера, скорости передачи данных и времени ожидания EEPROM.
#### Изменение начального значения таймера
Измените строки с 71 по 74 в main.c. Начальное значение таймера может быть сгенерировано программой STC-ISP.
```c
AUXR = 0x40; // Частота таймера 1 равна Fosc, то есть 1T
TMOD = 0x00; // Установка таймера 1 в режим автоматического перезаполнения 16-битного счетчика
TL0 = 0xC0; // Установка начального значения таймера
TH0 = 0x63; // 20 мс
Изменение скорости передачи данных влияет на основную частоту тактового сигнала, поэтому оба этих параметра требуют внимательного подхода.
Измените строки 75 и 76 в main.c.```c TL1 = 0xCC; // Установка начального значения
```markdown
TH1 = 0xFF; // Установка начального значения
Длительность ожидания при стирании и записи EEPROM этих моделей хранится в регистре IAP_CONTR. Необходимо изменить строки 170 и 190 файла main.c.
IAP_CONTR = 0x81; // Включение IAP
Для конкретных значений рекомендуется обратиться к руководству пользователя для STC8F и STC8A.
Длительность ожидания при стирании и записи EEPROM этих моделей хранится в регистре IAP_TPS. Необходимо изменить строку 257 файла main.c.
IAP_TPS = 24; // Настройка для STC8G и STC8H, значение по умолчанию — 24 МГц.
Значение должно быть округлено до целого числа в единицах МГц, например, если частота тактирования составляет 11.0592 МГц, то округление будет равно 11.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарий ( 0 )