AVR XMEGA – разгон, вольтмод и производительность SDRAM

14 декабря 2010, вторник 22:10
AVR XMEGA – разгон, вольтмод и производительность SDRAM
Overclocking the AVR XMEGA: voltmode and SDRAM performance


Из серии "Моя борьба с микроконтроллерами"

В выпуске:

Не любят производители микропроцессоров начинающих пользователей
Ложка технического дегтя в бочку меда XMEGA
Достоинства XMEGA
Что и как будем тестировать
Тесты на встроенном источнике тактовой частоты
Слава павшим героям
Что дает кварцевый резонатор
Подводим итоги


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

Любой бизнес, вырастая до некоторых размеров, перестает отвлекаться на мелкие вопросы и проблемы, в число которых входит и обслуживание интересов мелких потенциальных клиентов. Возни много. Задача бизнеса — произвести побольше и продать все, желательно крупным оптом.
Поэтому беспокойные индивидуумы отделяются завесой из дилеров, появление же компетентных лиц компании на публичных форумах сравнимо с периодичностью явления Христа народу.

Необслуживаемая категория у производителей МК - многочисленная армия людей, начинающих конструировать что-то своими руками. Спасает их то, что если продукт на рынке находится давно, то появляются многочисленные описания экспериментов энтузиастов, которые могут пролить свет на некоторые приемы работы с МК. Тем более, что зачастую выкладываемые производителями программные примеры и библиотеки имеют неудовлетворительное качество. Вплоть до полной изначальной неработоспособности, которую начинающему, в силу отсутствия необходимой квалификации, самостоятельно исправить практически невозможно.

Если говорить об известной компании Atmel и про ее популярнейшие для любительских поделок 8-битные микроконтроллеры, то в этом деле она тоже преуспела. Ряд примеров c официального сайта не компилируется (вылетает по ошибке) на бесплатной AVR Studio + WinAVR, зато они прекрасно работют на платном компиляторе IAR (которым и пользуется норвежский офис Atmel, выдающий на гора основную программных примеров). Ошибки простейшие — некорректные макросы, отсутствие некоторых модулей, и это все при запуске не заметить нельзя, так как компиляция не удастся. Почему такие примеры все же годами висят на официальном сайте?

Неудовлетворительный менеджмент качества плюс материальная заинтересованность, подогреваемая IAR, других причин я не вижу, иначе придется добавить наплевательское отношение к пользователям. Но, вырастая до некоторых размеров, ….и т.д., см. начало главы.

Конечно, на сайте Atmel много и добротного материала, как общнго плана, так и по коннкретным МК. Но когда все остальное хорошо, именно мелочи и бросаются в глаза.

Не первый год на рынке и изделия XМЕGA, которые ознаменовали новый этап в развитии 8-битных микроконтроллеров — упорядочена и расширена периферия, стандартизована маппировка, поднята производительность, аппаратная криптография, DMA, ADC+DAC, поддержка SDRAM до 16 мегабайт у старших моделей. Казалось бы, все хорошо, но вот цена, при меньшей производительности, в разы превышает сопоставимые модели Cortex-M3 на ядре ARM-v7m. Вот что значит самостоятельная разработка, в отличие от покупки лицензии. Впрочем, в мире микроконтроллеров, в отличие от «больших» процессоров, стоимость вообще имеет слабую корреляцию с производительностью.

Хотя и цены на XМЕGA нельзя назвать запредельными, но у NXP на ряд моделей Cortex-M3 в штучной рознице цена менее двух евро.

И еще момент — программный интерфейс XМЕGA либо JTAG+PDI, либо только PDI. Чего стоило бы разработчикам добавить GUI под Windows/Linux и прошивку любого МК (хоть Tiny), для работы с опубликованной в апноте AVR1612 библиотекой PDI для XMEGA? Делов-то на три дня (максимум) для одного человека. Для специалиста Atmel, наверное, и одного дня хватит.

Все вышеперечисленные проблемы лично меня мало касаются, так как я в состоянии справиться с чужими ошибками в программах (и, хоть и с трудом, со своими), а для программирования AVR скоро как год пользуюсь AVR Dragon, который прекрасно стыкуется с XMEGA как по JTAG, так и по PDI интерфейсу. Да и собрал сразу свою отладочную платку на ATXmega16A4 (даже две разных), чтобы «пощупать» сей чудесный девайс воочию. Но двойственное чувство не покидало — МК хорош, но преимущества по наличию криптодвижка мало кому интересны, поддержка SRAM/SDRAM - только у старших моделей, несущественно большая (по сранению с Cortex-M3) плотность периферии на число ножек вряд ли существенна для начинающих, а вот по производительности и цене он проигрывает. Но это и не старая ATMega – многие вещи сделаны по другому, адаптация сродни переходу на новый тип процессора. Хотя набор ассемблерных команд и не изменился.

Вернуться к теме XMEGA меня заставили опыты по динамическому выводу на экран LCD и работа с файловой системой, совместимой с Microsoft FAT12/16/32. Так как при этом обрабатываются большие (с точки зрения маломощных МК) объемы данных, то требуется наличие RAM, размером четыре-пять полных экранов (помимо пары видеобуферов — буфер под файловую систему, чтобы считываемый с носителя файл, или его часть, соостветствующая полному экрану, помещался в буфер целиком, плюс на текущие нужды). То есть, нужен мегабайт оперативной памяти. Лучше — еще больше, чтобы начать опыты по созданию своей ОС.

Так как к разработке своей платы с достаточным объемом памяти еще не приступил (но несколько раз собирался, а их планируется даже две, на STM32 с 2-3 мегабайтами статической памяти и на AT32UC3A3 c 32MB SDRAM), то, осматривая недорогие окрестности с подходящим объемом памяти, взгляд упал на изделие Atmel из серии XPLAIN, выполненное на базе лидера серии XMEGA - ATXMega128A1, с набортной SDRAM 8 мегабайт. На плате также присутствует последовательная флэшка на 8 мегабайт, моноусилитель с динамиком, подключенный к выходу DAC (через простейший фильтр), контроллер AT90USB1287 для связи с внешним миром (который скоро отпаяю, для освобождения части портов B и С у ATXMega128A1), а также 10-пиновой колодки, на которую сейчас подключен JTAG-интерфейс AT90USB1287. Кроме этого, на плате установлены восемь кнопок и восемь светодиодов. Это тоже пустим под нож, высвободив два полноценных 8-битных порта.

На внешние колодки предусмотрено устанавливать внешние модули, на сегодня доступны цветной дисплей с тачскрином (по неразумной цене около 100 евро) и модуль сенсорного управления (около 30 евро). Сам базовый модуль XPLAIN стоит примерно 40 евро. Цены даны с ориентировкой на каталожную стоимость Farnell.

Про начало моих экспериментов с ATXMega128A1 и будет рассказано далее, но сперва еще одна


Ложка технического дегтя в бочку меда XMEGA

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

Открытый опубликованный список ошибок флагмана ATXMega128A1 даже для исправленной ревизии чипа «H» состоит из пары десятков наименований. Некоторые из них весьма существенны. А в ревизии чипа «G» вообще не функционирует загрузчик (bootloader). ATXMega16A4 номинирован списком в девять ошибок, основная доля которых связана с работой аналогового компаратора.

Судя по «XMEGA A MANUAL», оставлен резерв под серию ATXMega A0 в 144-выводном корпусе, так как рассказывается про 4-х портовую, не очень красиво звучащую на русском транслите, шину EBI (External Bus Interface). ATXMega128A1 имеет 100 выводов и 3-х портовую шину EBI. Это приводит к тому, что для шины данных SDRAM остается всего 4 бита. То есть, помимо мультеплексирования адреса и управления, дополнительные временные затраты будут и на мультиплексирование данных. Кроме того, 3-портовая шина не разрешает одновременное подключение SDRAM и SRAM (или параллельного LCD/NOR Flash). И последний минус по внешней шине — не поддерживаются «интеллектуальные» и burst-режимы (а именно с их помощью и получается максимальная производительность). По крайней мере, заголовочный файл свободен от настроечных опций под эти режимы, а в настолько продвинутый контроллер шины EBI не верится ни капли.

Будет ли ATXMega A0 воплощена в кремнии — неизвестно, если правильно помнится, была обещана USB-версия XMEGA на 2010 год. Пара недель у Atmel еще есть. Но и нынешний флагман пока не получил максимальной комплектации, если сравнивать со всеми выпускающимися моделями серии, например, нет входа для батарейного питания, поддерживающего бэкап-домен и RTC, а регистр RTC 16 разрядный, хотя ATXMega256A3B имеет 32-битный регистр.

Несмотря на гордые заявления Atmel, что серия XMEGA — это 8/16 бит МК (16-битная только внутренняя шина таймеров), с таким же успехом можно ATXMega256A3B назвать 32-битным микроконтроллером. Безусловно, вся серия XMEGA — это 8-битные МК.

Классический SPI в режиме мастера остался без поддержки DMA. Но в большинстве случаев с одним мастером на шине можно заменить SPI на USART в режиме мастер-SPI, при этом по максимальной частоте SPI_CLK никакого проигрыша не будет. Хотя пропускная способность из-за специфики USART незначительно упадет, не будут также доступны некоторые особенности протокола SPI, например, детектирование коллизий на шине.


Достоинства XMEGA

Перечислим и основные моменты, выгодно отличающие XMEGA от большинства МК AVR MEGA.

Гарантируется работа на 32MHz при питании 3.3V, и до 12MHz при питании 1.6V. Максимальное рабочее напряжение 3.6V. Наличие усовершенствованной энергосберегающей технологии PicoPower.

Развитие получил контроллер прерываний - система прерываний стала многоуровневой, с динамическими приоритетами, уменьшилась латентность — прерывание более высокого уровня может «тащить» за собой прерывания низкого уровня почти без задержки. Выросло число обслуживаемых прерываний, и каждый вывод GPIO может быть их источником.

Для всех XMEGA А введен 4-канальный DMA, правда, серия XMEGA D не имеет встроенного контроллера DMA.

Появился механизм событий (events) со своей шиной, позволяющей уменьшить реакцию системы на управляющие сигналы. Например, можно легко реализовать запись-чтение многобайтовых программных регистров или структур. Все это делается без участия процессора, а прерывание само может являться «событием», событие может и инициировать обмен данных с DMA.

Упорядочена комплектация периферией и ее маппировка в памяти. Теперь гораздо проще осуществляется миграция на другую модель МК из серии XMEGA

Большой выбор опции генерации тактовой частоты, есть PLL с умножением (до х31), для формирования тактового сигнала быстродействующей периферии може генерироваться частота, большая чем у процессора МК. По документации — до 128MHz, однако без всяких ухищрений эта величина поднимается выше 160MHz. Также предусмотрена динамическая калибровка тактовой частоты по сигналам более прецизионных источников через две DFLL.

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

Набор периферии стал более емким, у старшей модели — 8 USART, 8 таймеров, по четыре SPI и TWI, 2 ADC с 2Msps, 2 DAC и разве что USB нехватает. Хотя цена бы поднялась еще выше, но этот порт явно не был бы лишним.

Выводы GPIO получили несколько новых режимов подключения.

Также был серьезно переработан заголовочный файл, для ATXMega128A1 его размер превысил 300 килобайт. Введено много новых структур, битовых полей и масок, облегчающих работу с внутренними регистрами МК. Для сравнения — заголовки к относительно старым МК серии MEGA были в сто раз меньше, а файлы для последних MEGA имели размер только около 30 килобайт.

Внешняя шина EBI дает возможность подключения SDRAM/SRAM, но не одноременно оба типа и у SDRAM обслуживается только 4-битная шина данных. Но все же это лучше, чем ничего, разрядность адреса — 24.

Встроен полноценный аппаратный AES/DES криптодвижок со 128-битным ключом (AES).

Ну и несколько дополнительных мелочей в виде ID, генерации CRC, структуризации флэшпамяти. На самом деле даже 16К МК имеет (16+4)К флэшпамяти и т.д.

Переходим к практике с XMEGA.


Что и как будем тестировать

В качестве испытуемых будут выступать:

1) МК ATXMega128A1, установленный на Atmel XPLAIN. На этой плате установлена также микросхема памяти SDRAM Micron MT48LC16M4A2-75 плотностью 64 мегабита и организацией 4банка х 4Мбит х 4, то есть суммарно 8МБ. Остальные компоненты XPLAIN нас пока интересовать не будут.

2) МК ATXMega16A4 на двух платках собственного дизайна, версии 1 и 2. Так как платки получились не совсем удачными по конструкции, они подвергнутся самым жестким испытаниям, так как совсем не жалко.

В качестве программатора МК (отлаживать нам ничего не надо) используется AVR Dragon.
Для визуального контроля цифровых линий на бредборде установлен логический анализатор OLS.

Для питания оборудования в номинальном режиме используется напряжение +5VUSB от ПК, для вольтмода — регулируемый блок питания PXN-1505D с цифровым контролем напряжения и тока.


Часть собранного стенда (нет еще одной платы с ATXMega16A4, она проявится попозже)



Блок питания PXN-1505D

Программирование — на С в среде AVR Studio 4.18 SP3.

Наша задача — попытаться выяснить предельные частотные режимы имеющихся МК XMEGA и определить пропускную способность памяти SDRAM на плате XPLAIN. Это необходимо для оценки производительности, на которую можно рассчитывать при выводе на экран LCD 320х240х16 динамического изображения.

Тактовая частота на процессоре микроконтроллера регулируется через PLL следующим образом. Источником может служить встроенный RC генератор на 2MHz, 32МНz или осциллятор с внешним резонатором. Допускается и внешний такт. Частота 2MHz и определяемая внешним резонатором подается на PLL напрямую, а 32МНz — через фиксированный делитель на 4. С помощью PLL выходная частота устанавливается с коэффициентом от 1 до 31 от исходной. Затем можно подключить программируемый делитель (на 1...512, степенями двойки). После этого делителя получается частота А, или частота периферии х4, CLKper4. Она может делиться на 1, 2 или 4, в результате получается частота В, или частота периферии х2, CLKper2, которая, в свою очередь, делением на 1 или 2, дает частоту С, которая служит и как CLKper, и как CLKcpu.

Таким образом, можно подать на CPU микроконтроллера и 200MHz (только вот зачем)? Реальный рубеж оверклокинга явно в несколько раз ниже.

Если в качестве источника использовать встроенный на 32МНz, то на PLL подается 8МНz. Конфигурируем CLKper4 на 128MHz умножением исходной частоты на 16:

CLKSYS_PLL_Config( OSC_PLLSRC_RC32M_gc, 16 );

Если делители для получения частоты В и С установить на два (каждый), получим частоту В, равную 64МНz, а частоту С, то есть, частоту процессора МК, равную 32МНz. То есть, включится максимальный гарантированный по частотам рабочий режим.

С такими установками, изменяя в приведенной функции значение множителя единичным шагом от 16 и выше, будем получать приращение тактовой частоты процессора с шагом в 2MHz. Удвоенное значение (частота В) служит тактовой частотой для SDRAM на плате XPLAIN.

Установленная SDRAM рассчитана на 133MHz, поэтому ее возможности будут раскрыты лишь наполовину. Это даст возможность работать исключительно по настройке МК, так как даже самые скоростные опции будут находиться внутри допустимых границ для SDRAM. Разумеется, тайминги по рефрешу и прочим системным вещам надо соблюдать. Типовой вид записи единичного байта в 4-битную SDRAM приведен в описании «XMEGA A MANUAL», п.33.14:


Тайминги 4-битной SDRAM

Диаграмма приведена при двух дополнительных пустых циклах NOP, то есть число тактов CLK равно семи, я при тех же настройках получил восемь тактов. Так как подцепиться логическим анализатором ко всем линиям не получается — шина не выведена на колодку, то источник «лишнего» такта пока не выявлен, надо будет попробовать через виртуальную маппировку портов EBI на порт D, но в другой раз.

Для определения производительности число записываемых байт на фиксированном временном отрезке можно визуально определить по числу «вспышек», или «блоков» по линии CLK, или же по импульсам nCAS. Производительность по чтению, которая обычно незначительно хуже, измерять не будем.

Поехали.


Тесты на встроенном источнике тактовой частоты

На плате XPLAIN запускаем немного модифицированную программу из апнота "AVR1312: Using the XMEGA External Bus Interface", которую можно скачать с официального сайта Atmel. Модификация касается тактовой частоты процессора (как описано выше), так как в апноте все тактуется от 2MHz. Производительность при этом будет примерно 200 килобайт в секунду и это нам ничего, кроме расстройства, не даст. Плюс подправим тайминги на минимально возможные, а диапазон проверки поставим сразу на все 8 мегабайт. Чтобы не засорять графики, период рефреша увеличиваем до трех микросекунд.

Программа записывает во все ячейки памяти константу 0xA5, затем читает все ячейки и сравнивает считанное значение с 0xA5. В случае несовпадения увеличивается счетчик ошибок. В моем варианте выход из локального цикла осуществляется при первой же ошибке, начало записи, чтения, окончание чтения, а также наличие ошибки выводятся на светодиодную индикацию, так как пока никакой другой визуализатор не подключен. И все это крутится во внешнем бесконечном цикле.

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

Начинаем с круглого множителя 20. Это дает частоту A, равную 160MHz, частоту В (т.е. памяти) 80MHz, а процессор будет работать на 40MHz. Частоту процессора выведем на седьмой пин колодки порта D, где ее будет удобно подключить к анализатору OLS. В программу нужно будет добавить строчку:

PORTCFG_CLKEVOUT |= 0b10;

Вот что будет показывать логический анализатор:


PLL и встроенный источник 32MHz. МК работает с тактом 40MHz



Тактовая частота процессора — верхяя строчка, заодно с помощью OLS измеряем и ее значение. Во всплывающем окне слева внизу видим 40MHz, Duty cycle 40%. Частота, как мы и ожидали. Длительность тактовых импульсов гуляет — не так просто бывает сгенерировать или разделить частоту по произвольному множителю или делителю. Да и встроенная задающая RC цепь обычно стабильностью не блещет. Кроме того, максимальная частота A определена в документации как 128MHz, а у нас уже 160. То, что такая частота действительно присутствует, видно и по «вспышкам» и фазировке 80-мегагерцового такта SDRAM_CLK.

Аналогично «потоковой записи» в LCD, цикл записи в SDRAM также развернут, поэтому для каждого полубайта (шина данных 4 бита) требуется 320нс, что дает немногим более 1.5MBps. Если же оставить в теле цикла только одну операцию записи, производительность снижается еще на 60%.

Первый рубеж условно взят (все же реальную циркуляцию данных мы не проверяли).

Пытаемся взять 50MHz по процессору, множитель — 25. Не стартует, светодиоды не загораются.

Идем вниз. При множителе 24 стартует, но работает странно — светодиод ошибки не загорается. Но и светодиод начала цикла записи не горит. Индикация конца чтения есть, сигнал правильного чтения тоже. Смотрим, что творится на шине.

Вместо SDRAM_CLK выведен сигнал nCAS, но его частота, судя по графику, равна половине SDRAM_CLK, то есть, частоте процессора. Чего не может быть в принципе, и это говорит о проблемах на шине EBI:


На такте 50MHz контроллер EBI выдает ерунду



Попробуем слегка помочь процессору свежим током. Предельное рабочее напряжение по референсному документу «XMEGA A MANUAL» и техническому описанию 3.6V. Хотя обычно в разделе абсолютных максимумов оно не называется рабочим. Но ничего другого обнаружить не удается. Для памяти Micron MT48LC16M4A2 не страшны и 4.5V, все остальные компоненты XPLAIN мне не жалко ни разу, да и доступны они в продаже, а вот 4-битная память SDRAM — дефицит.

Поднимаемся до 3.6V- ничего не меняется. Плавно (ручкой точной подстройки) идем вверх, на 3.83V вес взят:


Вольтмод убрал частокол некорректных импульсов nCAS



Но интересно увидеть предел без повышения напряжения.
Снижая множитель, получаем работоспособность шины EBI (теоретическую) при значениях 22-23. Более детальная проверка шины и памяти предстоит в ближайшем будущем, а пока на скорую руку подключаем по последовательному интерфейсу LCD и запускаем программу, выводящую разноразмерные и разноцветные прямоугольники в непрерывном цикле. Так как LCD MI0283QT-2 работает с тактом SPI до 50MHz, возможные артефакты изображения на такте SPI 22-23MHz будут свидетельствовать о сбое в МК. Что и было изредка видно при множителе 23. Поэтому для дальнейшей работы оставлен множитель 22, дающий возможность работы МК на частоте 44MHz.


Проверка работы МК по вычислительным задачам без использования внешней памяти. Артефакты ищем по проблемам в изображении на LCD

На самом деле, частота процессора 44.44MHz, так как фактическая исходная частота встроенного 32MHz генератора - 33.33 MHz, что даже превышает допуск по калибровке по ТТХ. При том, что 2MHz такт вписывается в один процент. И так у всех трех имевшихся в наличии МК XMEGA. Хотя и OLS не поверялся.

Кстати, для XPLAIN дополнительный оригинальный модуль дисплея выполнен на контроллере HX8347A, а LCD MI0283QT-2 — на HX8347D. Поэтому прямая замена, для запуска графического демонстрационного пакета из апнота AVR1922, невозможна, несмотря на схожесть команд и схемы подключения. Но и переделать несложно - нужно заменить код инициализации, а в макросах чтения-записи убрать лишние элементы (BS0).


Cравним также мастер-SPI через USART и обычный SPI, так как обычный мастер на XMEGA не поддерживает DMA и мы для чтения SD флэш-карт будем использовать SPI через USART.

Сравнение происходило при множителе 20, то есть при такте 20MHz.

SPI:


Классический SPI


USART:


USART в режиме мастер-SPI


Классический SPI быстрее на небольшие проценты.

То есть, на частоте МК 44.44MHz получаем почти 16Mbps, но и при такте SPI в 22.22MHz вряд ли догоним 18MHz SPI на STM32 Cortex-M3, так как там не 8-битная, а 16-битная передача, что убирает необходимость повторной загрузки данных и операцию сдвига для каждой точки изображения.

Пока на плате XPLAIN работу завершаем. Наиболее рискованные опыты проведем на наименее ценных членах экипажа.


Слава павшим героям

Как-то не повезло мне с изготовлением собственных печатных плат под XMEGA.


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

Первая (зеленого цвета) сделана в одном из самых первых моих опытов по разработке печатных плат на компьютере и имела две проблемы. Первая - зеркально выполненная разводка разъема PDI, что, вобщем-то не страшно, так как два провода до программатора можно протянуть и отдельными линиями.

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

Поэтому разъем PDI был перепаян на противоположную сторону платы и сделан угловым, так как все равно в бредборде работать с ней не удобно, зато хоть не надо тянуть отдельные провода для программирования.

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

Набор контактных колодок правее МК (на верхнем фото перекрыты зеленой платой) был ошибочно выполнен с горизонтальным смещением в 1.27мм от сетки 2.54 для левой группы контактов. Поэтому справа вместо колодок установлены два ряда гнезд. Можно было сказать, что так и задумывалось, но давно уже говорю только правду, и ничего, кроме правды. Вероятно, все эти собственные промахи невольно укрепили прохладное отношение к серии XMEGA. Но и поэтому эти платы абсолютно не жалко, и они стали предметом беспощадного эксперимента.

Поскольку на обеих установлены кварцевые резонаторы (а на XPLAIN для XMEGA есть только часовой кварц), было бы интересно проверить, связано ли гулянье фазы тактовой частоты с работой встроенного задающего RC-генератора, либо это больше вина логического анализатора.

Начинаем с красной платы. Попробуем установить процессор на 50MHz, подключая внешний резонатор. Программируем МК — и тишина. На линии тактовой частоты пульса нет. Но и по интерфейсу PDI МК тоже больше не отвечает — перепрограммировать или стереть возможности нет. Странно, так как интерфейс PDI первым делом делает сброс с удержанием, во время которого тактовая частота на XMEGA всегда сбрасывается на внутреннюю генерацию 2MHz, независимо от программы. Но - молчит, зараза. Даже заставил пропаять (на всякий случай) область верхней части платы слева от МК — там как раз сразу два вывода PDI и следующие два — на резонатор. Не помогло. Мы его потеряли? Как это, у меня — и не заработало? В азарте принимаемся за зеленую плату. Уж этого мы заставим — питание сразу от внешнего регулируемого источника. Жажда реванша затмевает глаза. Садим ему ту-же программу 50MHz от внешнего кристалла. Тишина. Пульса нет.

Дурное дело нехитрое — повышаем напряжения, контролируя ток. Вот что написано в руководстве по МК ATXMEGA16A4 для нормальных режимов:




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

Последнее, что было замечено, 4.2V и ток 40мА. На этом рубеже плата от потребления тока отказалась. Навсегда. RIP.

Естественно, сработал человеческий фактор - до этого XMEGA программировалась почти год назад и единственный день, после чего была заброшена и забыта. Сейчас же, задавая источником тактовой частоты осциллятор с внешним резонатором, забыл про необходимость установки регистра XOSCCTRL. Если туда ничего не ввести, то по умолчанию там нули и работать не будет. А я в программе исправил только тип источника и соответствующие маски.

Проверяем на XPLAIN — подпаиваем резонатор 8MHz к выводам порта R0 и R1, меняем в программе установку такта на внешний резонатор и добавляем в начало строчку конфигурации:

CLKSYS_XOSC_Config( OSC_FRQRANGE_2TO9_gc, false, OSC_XOSCSEL_XTAL_1KCLK_gc );



На XPLAIN подпаян кварцевый резонатор

Естественно, все заработало. Учитывая, что вышеприведенный график потребляемого тока — для работающего МК, а график потребления в случае «покоя» ниже 1mA, то безвременно почивший МК умирал на электрическом стуле мучительно долго и без облегчающих страдания тактирующих импульсов. Весь ток шел по самым больным местам.

Но на красную плату повышенное напряжение не подавалось. Делается еще несколько безуспешных попыток достучаться до МК по PDI. Но ток он потребляет, следовательно электрического пробоя может и не быть, но что-то его клинит. Убираем с платы с платы резонатор:


Плата с ATXMEGA16A4. Резонатор снят

МК оживает! Позже надо будет попробовать воспроизвести еще раз эту нештатную ситуацию, так как причина ступора не понятна. Про себя скромно умолчим.


Что дает кварцевый резонатор

При осцилляторе, работающем от кварца, такт в 40MHz выглядит очень хорошо:


Работа на 40MHz, осциллятор с кварцевой стабилизацией



Следовательно, частота PLL 160MHz также красивая, скважность, правда не половинная, но она зависит от способов пересчета и примененных предустановок и не всегда будет получаться 50%.

Так как теперь исходная частота (8MHz) подается на PLL напрямую, без делителя на 4, то единичное изменение шага множителя приводит к изменению частоты процессора на 4MHz при суммарном делении частоты A на 4. Можно установить деление частоты A на 2, тогда можно давать приращения тактовой частоты по 2MHz.

Но такт 52MHz без повышения напряжения приводит к периодическому зависанию графического вывода, 50MHz — почти всегда хорошо, поэтому откатываемся еще на ступеньку назад, до 48MHz. Тактовая частота при этом выглядит так:


Финальная тактовая частота 48MHz



Пять импульсов по 20нс формируют 50MHz, а каждый шестой длится немного дольше, обеспечивая на продолжительном отрезке суммарную длительность импульсов, соответствующую равномерной частоте 48MHz. Можно сказать, что МК более 80% времени работает на частоте 50MHz.

Соответственно, работа SPI происходит на "средней" частоте 24MHz, что обеспечит чуть более 2MBps. SDRAM тактуется 96MHz и можно рассчитывать на реальную ПСП в районе четырех с половиной MBps. Но пока на такой частоте никто не гарантировал нормальную работоспособность контроллера шины EBI, это мы проверим в ближайшем будущем. За микроновскую SDRAM можно не опасаться — даже в этом случае мы используем чуть более 60% от ее расчетного быстродействия.

Все-таки, если не требуется частота PLL в 8*24 = 192MHz и для высокого разрешения таймеров хватит 192/2 = 96MHz, то лучше поставить множитель не 24, а 12, частоту CLKper2 уравнять с CLKper4 (96MHz), а для процессора получать такт делением CLKper2 на два.


Подводим итоги

В целом, мое отношение к серии XMEGA изменилось в лучшую сторону.
Если контроллер SDRAM пройдет тесты на частоте 96MHz, то … все равно 32-битные AVR обеспечивают лучшую цену за MIPS. Причем в два раза и более. Но для тех, кто не хочет переезжать с восьмибитных микроконтроллеров, XMEGA даст более, чем двукратный рост производительности и массу новых возможностей.

При этом простое применение кварцего резонатора дает возможность поднять стабильную частоту МК дополнительно на 10%, по сравнению со встроенным осциллятором с задающей внутренней RC-цепочкой.

Производительность 24Mhz мастер-SPI через USART и 96MHz SDRAM на XPLAIN, при работе МК на частоте 48MHz, позволяет продолжить на на этой базе подготовку к проверке прохождения и оптимизации потока данных от SD-SPI до LCD, с использованием файловой системы FATFS, при достаточных по размеру буферов чтения-записи в SDRAM. Использованием DMA высвободит процессор, например, для обработки уже находящегося в буфере предыдущего кадра. Наличие цепочки видеобуферов и DMA-вывод должны существенно повысить скорость вывода информации на экран.

В отличие от десктопных процессоров, разгон на 50% не привел к необходимости бороться с тепловыделением. Температура поверхности MK примерно 34°С, что на 2.5° выше, чем у стоящего рядом (левее 2см) МК AT90USB1287, самым горячим элементом на плате был регулятор напряжения (36°С), так как через него запитывается и LCD с подсветкой. Неработающая память SDRAM нагревается до 31°С (в основном, за счет теплопередачи через PCB), а при работе примерно сравнивается с МК. Окружающая температура 24°. Измерения проводились прибором DVM8861.

PS1
Еще бы и цену ополовинить то было бы просто здорово, но Atmel это делать незачем - не справляется со спросом, большинство моделей МК — в постоянном дефиците у крупных онлайновых дилеров. Так что затоваривания не происходит.

PS2
Недавно получил от Xilinx приглашение на webinar, где рассматриваются последние FPGA этого производителя и обработка с их помощью потоков в 400Gbps. Этот показатель сильно контрастирует с моими жалкими попытками впихнуть в LCD поток примерно раз в 15000 пожиже.


Обсудить можно здесь.

На сегодня все,
Zauropod,
14 декабря 2010 года.
Оценитe материал

Возможно вас заинтересует

Популярные новости

Сейчас обсуждают