В этой статье мы рассмотрим самую базовую вещь: прошивку контроллеров Atmel AVR.
Чем будем шить? — SWD, FPI, ICE? Неет… Это вам не 32-ух битные черти, это скромные и добрые 8-ми битные существа с SPI интерфейсом внутрисхемного программирования. 🙂 Также их можно программировать через JTAG, но сейчас не об этом.
Для работы SPI интерфейсы необходимы линии:
- SCK — тактовый сигнал
- MOSI (Master Out Slave In) — линия данных от ведущего устройства к ведомому
- MISO (Master In Slave Out) — линия данных от ведомого устройства к ведущему
- RESET — сброс, при программировании должен прижат к земле
К примеру, взяв контроллер Atmega32, линии интерфейсы будут там:
Теперь нам нужно что-то вроде преобразователя: ПК->SPI->MK. Один добрый человек, Громов, сделал простой программатор для AVR, работающий от COM порта ПК.
Почему не LPT? — LPT порт уже редкость, которую можно легко спалить, а COM еще доживает свое и обладает крайней живучестью. В итоге получается небольшая конструкция, которую можно реализовать навесным монтажом. 🙂
Далее нам необходимо обзавестись программой, которая собственно будет прошивать. Это Uniprof, разработка Николаева. Она проста в использовании, позволяет читать/писать флеш-память МК, EEPROM, а также изменять фьюзы.
Проверьте драйвер вашего COM порта. Желательно установить внешний на ваш МК.
Итак, подаем питание на МК, подключаем его к программатору, затем ищем соответтвующий порт в Uniprof. Программа сама определит какой у вас МК. Если тактовая частота МК < 16MHz, то ставим галочку ТОРМОЗ. Uniprof принимает .hex файлы, при прошивке не требуется наличие какого-либо загрузчика.
Теперь мы можем читать/писать/стирать. После прошивки необходимо отключить МК от программатора. (иначе он будет в reset-те)
Поддерживаемые контроллеры:
- 1200
- 2313
- 2323
- 2333
- 2343
- 4414
- 4433
- 8515
- 8535
- mega103
- mega128
- mega1280
- mega1281
- mega16
- mega161
- mega162
- mega163
- mega165
- mega168
- mega169
- mega2560
- mega2561
- mega32
- mega324
- mega325
- mega3250
- mega48
- mega603
- mega64
- mega640
- mega645
- mega6450
- mega8
- mega8515
- mega8535
- mega88
- pwm23
- tiny12
- tiny15
- tiny13
- tiny2313
- tiny24
- tiny25
- tiny26
- tiny45
- tiny44
- tiny85
- tiny84
Файлы:
- Uniprof
- ?
Спасибо за статью! Как выбирать частоту кварца и номинал конденсаторов?
О каких кварце и конденсаторах Вы говорите? Если на микроконтроллере, то конденсаторы по 10-20pf, кварц — определяет тактовую частоту микроконтроллера, и в моем случае на 16MHz.
Спасибо за подсказку!
В некоторых изделиях рекламируют выбор кварца (чуть больше 7 МГц)для надежной работы с RS-232.
Полагаю, в нашем случае цепь SCK обеспечивает синхронный режим работы порта, поэтому нет проблем с частотой.
Были ли проблемы с USB-RS232 кабелем?
Извините что так долго, глюки сайта. Насчет USB-RS232 — не пробовал.
Цитата: В некоторых изделиях рекламируют выбор кварца (чуть больше 7 МГц)для надежной работы с RS-232.
Вы говорите немного не о том. В указанном программаторе COM — порт ПК эмулирует интерфейс SPI, посредством которого, «заливается» прошивка в МК. А перечень номиналов кварцов для различных скоростей работы UART (именно в контроллере) приведён в даташитах на МК. Здесь http://www.embed.com.ua/mikrokontrollernyiy-konstruktor/rabota-s-uart/ можете почитать подробнее.
Цитата: Полагаю, в нашем случае цепь SCK обеспечивает синхронный режим работы порта, поэтому нет проблем с частотой.
Да, именно этот сигнал и есть синхроимпульсы интерфейса SPI.
Цитата: Были ли проблемы с USB-RS232 кабелем?
В статье по указанной выше ссылке есть информация о таком преобразователе.
Удачи!
Подскажите, как установить фьюзы для atmega32 с кварцем 16Мгц?
Нужно изменить только Fuse(LOW), я сделал это так:

Также можно воспользоваться калькулятором фьюзов.
Фьюзы должны быть стандартными, но в нашем случае бутлоадер вообще не нужен.
Спасибо, все вышло.