Jump to content

    
Sign in to follow this  
Демон-13

Загрузчик Chip45 для AVR ATmega 328P

Recommended Posts

Что то не получается завести загрузчик Chip45 на ATmega 328P, делал так:
1. Фюзы установил как на картинке (см. вложение)
2. Загрузил в контроллер chip45boot2_atmega328p_uart0_v2.9Q.hex
3. Подключил к контроллеру USB/UART адаптер(betemcu.cn), RX и TX крестом, а RXD на ногу RST.
4. пробую лить прошивку через chip45boot2 GUI
5. Но после нажатия кнопки Connect to Bootloader квадратик желтым не становитьсяsad.gif

Такие вопросы возникли:
1. Может кто то сходу криминал в моих действиях заметит?
думаю, что проблема в том что контроллер не сбрасываеться в RST.
2. Кто не будь в курсе, при запуске программы chip45boot2 GUI, дает ли она команду на сброс контроллера? Или его всегда нужно отдельно производить и самому?

P.S. Контроллер у меня бывший Arduino Mini (Алишопный)

2019-12-26_23-38-23.jpg

Share this post


Link to post
Share on other sites
17 часов назад, Демон-13 сказал:

. Может кто то сходу криминал в моих действиях заметит?

Понятия не имею про этот загрузчик, но общие соображения:

1) Состояние BOOTSZ должно соответствовать начальному адресу вашего загрузчика. На всякий случай проверьте. И учтите, что в документации на контроллер, в описании этих битов, начальный адрес области загрузчика указан в словах, а в hex-файле он в байтах, т.е. в два раза больше.

2) Состояние CKSEL указывает на внешний кварц. Он запаян? Его частота соответствует той, на которую расчитан собранный образ вашего загрузчика? Конденсаторы на нем стоят правильного номинала? Есть ли вообще генерация на кварце?

3) CKDIV у вас запрограммирован, т.е. часота кварца делится на 8. Сильно сомневаюсь, что загрузчик задуман работать на такой низкой частоте или что в его коде предусмотрена настройка предделителя (регистра CLKPR). Полагаю, что этот бит должен быть запрограммирован в 1, т.е должна стоять галочка.

 

17 часов назад, Демон-13 сказал:

2. Кто не будь в курсе,

правильно писать "нибудь"

17 часов назад, Демон-13 сказал:

дает ли она команду на сброс контроллера?

Заведен ли какой-нибудь сигнал с вашего интерфейса на ногу RST? Если нет - то в описании этого загрузчика должна быть описана какая-то команда, при посылке которой ваше приложение должно делать программный сброс (единственный способ сделать это в AVR - запустить собаку (watchdog) и дать ей сработать). Если ничего этого нет - то значит такой команды не предусмотрено.

Share this post


Link to post
Share on other sites

Из chip45boot2 Infosheet :

QUICKSTART
• set fusebits to 1k boot block, activate boot reset vector and disable 1/8 prescaler
• download the correct chip45boot2 hexfile to your target
• connect your target to a PC
• start the chip45boot2 GUI, select COM port and baud rate and press “Connect to Bootloader”
reset your target (not necessary, if your target supports auto-reset-feature)

Как уже посоветовал  Сергей Борщ, необходимо запретить CKDIV8 и вручную сбросить МК для входа в загрузчик. Что такое auto-reset-feature я в документации не нашёл.

Share this post


Link to post
Share on other sites


On 1/2/2020 at 5:28 AM, Сергей Борщ said:
Понятия не имею про этот загрузчик, но общие соображения:

...


1. Это я более менее понял, ну то есть, в начале ячеек памяти записан загрузчик и что бы его не затереть, нужно немного отступить по доступу к ячейкам памяти... С толку сбивает другое, что не понятно как определить, где биты с инверсией указаны, а где нет... Ну да ладно, это не самая большая проблема, это можно методом научного тыка определить и внимательно почитать как именно восспринимаються биты в документации на МК...

2. Кварц запаян. МК представляет из себя Arduino Mini (китайского производства), только я использую его не для ардуиновских скетчей... 

On 1/2/2020 at 5:28 AM, Сергей Борщ said:
2) Его частота соответствует той, на которую рассчитан собранный образ вашего загрузчика? Конденсаторы на нем стоят правильного номинала? Есть ли вообще генерация на кварце?


А вот тут мне не совсем понятно. Я как то даже не думал, что загрузчик может быть рассчитан под определенный кварц:( Поищу информацию в мануале...

3. На счет CKDIV  согласен. Проверял на мигании диода, фигня какая то получается.

On 1/2/2020 at 5:28 AM, Сергей Борщ said:

Заведен ли какой-нибудь сигнал с вашего интерфейса на ногу RST? Если нет - то в описании этого загрузчика должна быть описана какая-то команда, при посылке которой ваше приложение должно делать программный сброс (единственный способ сделать это в AVR - запустить собаку (watchdog) и дать ей сработать). Если ничего этого нет - то значит такой команды не предусмотрено.

Вот это как раз основная проблема, как сбросить МК через USB/UART?

1. Заводил на RST, пин DTR с USB/UART. 

2. На счет команды почитаю, но сомневаюсь, что она там есть, поскольку во всех интернет источниках которые я находил касательно этого загрузчика, все сбрасывают МК в ручную и при этом используют другую плату(как правило самопальную) с другой обвязкой... 

Я честно говоря думал, что если фюзы выставлены определенным образом, то для сброса достаточно подать низкий(или высокий) уровень на ногу RST МК, а получается, что это делается, только программно? 

 

В принципе на данный момент меня мучает два вопроса: 

1. Могли бы вы мне посоветовать какой нибудь загрузчик? Мне всего лишь нужно загружать свои программы через USB/UART...

2. Можно ли реализовать автоматический сброс от USB/UART? 

3. Работа ноги RST на МК от чего зависит? От состояния фюза или может быть от программы которая в МК залита? 

Share this post


Link to post
Share on other sites
9 часов назад, Демон-13 сказал:

Это я более менее понял, ну то есть, в начале ячеек памяти записан загрузчик и что бы его не затереть, нужно немного отступить по доступу к ячейкам памяти...

Так делается в большинстве других контролеров. В AVR под загрузчик выделяется область в конце памяти и при запрограммированном бите BOOTRST выполнение программы начинается с этой области. Размер области определяется битами BOOTSZ и выбирается таким, чтобы в нее уместился загрузчик.

"более-менее" пишется через дефис.

9 часов назад, Демон-13 сказал:

С толку сбивает другое, что не понятно как определить, где биты с инверсией указаны, а где нет...

На вашей картинке красным по белому написано: без инверсии, т.е галочка соответствует единице. Ориентироваться проще всего по биту RSTDSBL - пока он в единице, вы можете достучаться до контроллера программатором.

9 часов назад, Демон-13 сказал:

1. Заводил на RST, пин DTR с USB/UART

А программа на компьютере знает, что ей надо подергать этот сигнал?

9 часов назад, Демон-13 сказал:

во всех интернет источниках которые я находил касательно этого загрузчика, все сбрасывают МК в ручную

Значит нет такой команды, программа дергать RST никак не умеет и вам тоже придется сбрасывать вручную - либо какой-то кнопкой на RST, либо передергивая питание. Или, если имеются исходники программы, добавить в нее дерганье DTR.

"Вручную" пишется слитно.

9 часов назад, Демон-13 сказал:

Я честно говоря думал, что если фюзы выставлены определенным образом, то для сброса достаточно подать низкий(или высокий) уровень на ногу RST МК

Да, именно так - если бит RSTDSBL не прописан в ноль, нужен низкий уровень на ноге RST.

 

9 часов назад, Демон-13 сказал:

Могли бы вы мне посоветовать какой нибудь загрузчик? Мне всего лишь нужно загружать свои программы через USB/UART...

Я использую загрузчик из примера применения AVR231, но он настолько сильно доработан напильником, что от него почти ничего оригинального не осталось. И после этих доработок мои программы обновляются по команде через УАПП (UART) в любой момент времени, дергать RST не требуется. Естественно, основная программа (приложение) умеет принимать эту команду и при получении этой команды выполняет некоторые действия для запуска загрузчика. Загрузчик, если запущен не из приложения (если контрольная сумма приложения не совпала) тоже умеет принимать эту команду и само обновение начинается только после получения такой команды. Загрузчик при включении питания проверяет контрольную сумму приложения и отдает управление приложению только в том случае, когда контрольная сумма приложения совпала. Если не совпала - мигает всеми светодиодами и ждет команду обновления.

9 часов назад, Демон-13 сказал:

Можно ли реализовать автоматический сброс от USB/UART? 

Да, можно. Организуете прием команд, по определенной команде запускаете WDT на минимальное время и зацикливаететесь.

9 часов назад, Демон-13 сказал:

Работа ноги RST на МК от чего зависит? От состояния фюза или может быть от программы которая в МК залита? 

Конкретно в этом МК - только от состояния RSTDSBL.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this