[an error occurred while processing this directive]
Вот последняя редакция:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Сергей Борщ 28 августа 2002 г. 20:27
В ответ на: существует ли хороший FAQ по программированию msp430? отправлено Dezp 28 августа 2002 г. 13:23

From: "Sergey A. Borshch"

Версия 1.2
Список изменений по сравнению с 1.1:

1. Добавлены пункты 2, 4, 6, 8-11, 14, 15, 17, 18, 20-23.
2. Обновлены с учетом прошедшего с момента выхода предыдущей версии времени пункты 1, 3, 5, 7, 13, 16, 19.
3. Исправлены синтаксические и грамматические ошибки, добавлены новые :-)


1)
Q: Что нужно для того, чтобы начать работать с msp430F1xx?
A: Возможны несколько вариантов. Первый - приобрести у дистрибьютеров Texas Instruments стартовый набор. Их несколько вариантов, в зависимости от того, с каким из кристаллов вы хотите работать:
MSP-FET430x110 для кристаллов серии MSP430F11x1 (стоимость около $60)
MSP-FET430P120 (около $110) для кристаллов серий MSP430F12x.
MSP-FET430P140 (около $110) для кристаллов серий MSP430F14x/F13x.
MSP-FET430P410 (около $110) для кристаллов серий MSP430F41x.
MSP-FET430P440 (около $110) для кристаллов серий MSP430F44x.

В комплект поставки этих наборов входит отладочная плата с панелькой для контроллера, 2 контроллера соответствующего типа, программное обеспечение (ПО), комплект документации. ПО состоит из компилятора С, ассемблера, линкера, симулятора, внутрисхемного JTAG-эмулятора (он же программатор). Поставляемая с набором версия ПО имеет ограничение на размер кода в 4К (ассемблер - без ограничений), в прилагаемых библиотеках отсутствуют функции для чисел с плавающей точкой - exp(), fabs(), sin() и т.д. Сложение, вычитание, умножение и деление чисел с плавающей точкой работает.
Программатор-эмулятор подключается к LPT порту.
Питание на ваше устройство надо подавать со 2-й ноги разъема, если устройство питается от ФЕТа, и с 4-й - если у устройства есть свой источник питания.

Далее для краткости будем называть этот преобразователь LPT-JTAG (или его самодельный аналог) "эмулятором".

Примеры программ надо отдельно скачивать с сайта - там они более полные, чем в комплекте MSP-FET. В версии 3.04 - для P140 на Си в инсталляции 10 файлов, в slac015.zip - 51 файл.

Второй вариант - программное обеспечение и документация от набора свободно доступны на сайте Texas Instruments (www.ti.com, далее MSP430-> Free tools/Downloads ->Kickstart). Размер файла около 19Мб. На сайте IAR можно взять демо-версию пакета с ограничением 30 дней, библиотеки более полные, но симулятор поддерживает только ядро. Можно поверх версии от IAR установить update от тексаса (лежит там же, где и софт от кикстарта) - появится нормальный симулятор и внутрисхемный эмулятор. Оно рассчитано на работу под Windows 95/98/ME/NT/2000/XP. Поддержка других ОС тексасом не планируется. Схемы эмуляторов и отладочных плат приводятся в файлах документации (FET User's guide ХХХХХХ .pdf). Самая простая схема эмулятора (MSP-FET430x110) состоит из одной микросхемы 74AHC244, стабилизатора 3.3в, нескольких диодов, конденсаторов и резисторов. Тем не менее она позволяет работать со всеми флешевыми процессорами серии MSP430. Собрать ее самому не составляет труда. В интернете (например, www.caxapa.ru, раздел "ссылки") есть несколько еще более простых вариантов этой схемы - без возможности отлаживаться при различных напряжениях питания. Сопротивление R6 штатной схемы от кикстарта нужно уменьшить до 100 ом (рекомендация тексаса) - будет нормально работать с интегрированными портами. На сайте IAR можно взять демо-версию пакета с ограничением 30 дней, библиотеки более полные, но симулятор поддерживает только ядро. Можно поверх версии от IAR установить update от тексаса (лежит там же, где и софт от кикстарта) - появится нормальный симулятор и внутрисхемный эмулятор.
Остается приобрести собственно микроконтроллер и - вперед!

Вариант третий - вышла в свет среда разработки IDE430 (http://www.ide430.com/) - результат эволюции некогда бесплатного компилятора MC430. Среда имеет поддержку эмулятора, однако качество кода, генерируемого компилятором С несколько хуже, чем у компилятора от IAR, но есть возможность генерации ассемблерного кода (это собственно и есть выход компилятора) и цена ($125) существенно ниже цены за полную версию пакета от IAR.

Существует также портированный и поддерживаемый Дмитрием Диким GNU - компилятор.
Вот данное им краткое описание (цитирую с согласия автора):
Найти его можно на http://mspgcc.sourceforge.net - там лежат все патчи, а так же есть ссылка на уже собраную версию компилятора для Windows (http://www.mikrocontroller.net/msp430.en.htm).
В настоящий момент из GNU tools портированы:
1. Binutils, включающие ассемблер, дизассемблер, линкер, библиотекарь и другие.
2. Компилятор с языка С. С++ тоже работает, но до сих пор руки не дошли до С++ библиотек.
3. Отладчик с эмулятором. Позволяет исполнять программу, ставить брейкпоинты, ватчпоинты.
4. Библиотека стандартных функций включающая sprintf(), uprintf(), setjump(), longjump() и др.
5. Stand-alone симулятор, написаный на языке python
6. BSL загрузчик для всех кристаллов.
7. JTAG загрузчик.
Cовсем недавно достигнуто некое соглашение с TI о том, что можно будет портировать JTAG отладку в GDB. Однако сие не будет доступно в виде исходных кодов в ближайшее время. Поэтому принято решение по созданию SERIAL->JTAG интерфейса для внутрисхемной отладки кристаллов.
Схема этого интерфейса, программа для промежуточного контроллера, а так же рекомендации будут выкладываться на страничку по мере их тестирования.
Развернутая документация, FAQ и описания расширений компилятора можно найти на http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/mspgcc/msp430-libc/doc/ (пока что все на плохом моем английском, но один американец взялся отредактировать эти документы). Во всяком случае автор готов ответить на любые вопросы по-русски :)
Так же в http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/mspgcc/examples/ живет несколько примеров и полезных программ от Chris Liechi.


2)
Q: А где описана ситема команд? В даташите ее нет!
A: Да, у тех, кто познакомился с документацией Микрочипа вызывает недоумение столь кратенький даташит. В нем описаны только электрические параметры, цоколевка, карта памяти, расположение регистров специального назначения (SFR), векторов прерываний в памяти, и в общем виде реализация некоторых модулей (генератора, таймеров, АЦП, компаратора). Общее же для всего семейства подробное описание всех модулей, ядра, система команд и их коды приведены в документах:
на семейство MSP430x1xx - SLAU049B "MSP430x1xx family User's Guide"
на семейство MSP430x3xx - SLAU012A "MSP430x3xx family User's Guide"
на семейство MSP430x4xx - SLAU056B "MSP430x4xx family User's Guide"

Кроме того, на сайте имеется множество примеров применения, с описанием схем, программ и используемых при проектировании устройств на MSP430 схемотехнических и программных приемов. Названия этих файлов начинаются на slaa. На семейство однократных кристаллов MSP430x3xx была выпущена книжка "MSP430 Application Report Book" (SLAA024). Большинство описанных в ней приемов применимы и к флешовым кристаллам. На последних дисках от тексаса и дистрибьюторов имееся документ ar_1xx.pdf "MSP430x1xx Family Mixed Signal Microcontroller Application Reports". Она написана как дополнение к вышеупомянутой SLAA024 с упором на новшества, появившиеся в серии 1xx.


3)
Q: Где взять кристаллы MSP430F1хх/F4xx?
A: Hа данный момент этими процессорами торгуют фирмы "СКАH"(www.texas.ru), "СКАHТИ-Рус" (www.scanti.ru), Компэл (www.compel.ru). У них на складе имеется довольно большой выбор кристаллов и совершенно спокойно можно купить 1-2 штуки. "Сканти-Рус" имеет представительства в Питере, Минске, Киеве, Днепропетровске. "Скан" - в Питере, Воронеже, Минске, Новосибирске.
Если вы делаете серьезный проект, то через дистрибьютеров его можно зарегистрировать у Texas Instruments и получить существенные скидки.


4)
Q: Самопальный программатор не видит кристалл. В чем причина?
A: Будем считать, что замыканий и ошибок в схеме нет :). Наиболее часто встречающаяся причина - длинный кабель между эмулятором и кристаллом. Длина кабеля между компьютером и эмулятором роли не играет (у меня 2 метра), а шнурок между эмулятором и кристаллом длиной 20см уже вызывает сбои (То появляется ошибка "Could not find target (or target not supported)", то "Unable to read target memory", то "Unable to set breakpoint"). 10см шлейф работает нормально.


5)
Q: Hовый кристалл не находится эмулятором, старый читается и пишется без проблем.
A: Если все необходимые сигналы (питание, TMS, TDI, TDO, TCK, TEST, RST) присутствуют, а ПО все-же не видит кристалл, возможно, в опциях эмулятора отключено программирование кристалла после запуска эмулятора (Project-> Options-> C-Spy-> Flash Emulation Tool -> Suppress download). Почему-то превый старт нового кристалла происходит только с программированием. Судя по всему эмулятор при первом запуске должен прописать в кристалл какой-то код, по которому в дальнейшем, при последующих запусках, будет определять наличие кристалла. В случае же, если включено программирование при запуске, эта проверка осуществляется после программирования, т.е. когда код уже прописан. Вывод: или на время первого запуска отключать опцию suppress download или запускать эмулятор с уже хотя бы один раз запрограммированным кристаллом, а после того как эмулятор его найдет - менять кристалл на новый и выполнять Init new device.


6)
Q: Единственный имеющийся кристалл (или единственный запаянный) нормально работал и вдруг перестал находиться эмулятором. Последняя программа в нем при этом работает.
A: К сожалению, такое хоть и редко, но встречается, и пользователи, с которыми я общаюсь, так и не нашли объяснения этому явлению. Видимо, JTAG-машина кристалла попадает в какое-то дивное состояние, вышибить из которого ее непросто. Помогают "танцы с бубном" - отключение на несколько секунд полностью всех питаний с платы (паразитных в том числе), подключение эмулятора к плате, находящейся под питанием (знаю, что неправильно, а что делать? - иногда помогает!), запуск C-SPY с выключенной опцией "Suppress download", перегрузка компьютера, перекур :-).


7)
Q: Как отличить инженерные образцы от серийных?
A: Инженерные образцы называются PMS430F1xxx и имеют маркировку на корпусах P430F1xxx, в то время как серийные называются MSP430F1xxx и маркируются M430F1xxx. Обращаю внимание на то, что у серийных кристаллов MSP430F11x1 по сравнению с PMS430F11x1 _первых_партий_ изменен адрес начала сегмента Flash Data (INFO) 0xEF00 на 0x1000, а адрес сегмента BootRom с 0x0800 на 0x0C00. Адреса этих сегментов в кристаллах MSP430F11x1 совпадают с адресами этих же сегментов в F14x, F13x, F4xx.


8)
Q: Куда подключать незадействованные ножки кристаллов?
A: Это описано в SLAU049B: 3.6 Basic Hints for Low-Power Applications, стр. 3-29.


9)
Q: Чем же все-таки определяется направление ножки порта при взведенном бите Px.xSEL - битом Px.xDIR или режимом подключенного к этой ножки внутреннего модуля?
A: Для разных модулей по-разному. Например, к ножке P3.4 кристалла MSP430F149 подключен выход передачи UART0. Логично, что при включеном UART этот вывод должен быть настроен на вывод. Поэтому направление определяется однозначно ка "выход" при взведенном бите P3.4SEL. В то же время ножка P1.1 может быть как выходом модуля CCP0 в режиме Compare так и входом в режиме Capture. Но модуль CCP0 имеет возможность в режиме Compare защелкивать состояние этого входа (используя это очень легко построить довольно высокоскоростной программный UART, см. SLAA078A). Таким образом, если вы хотите защелкивать состояние входа, вы настраиваете его на ввод битом P1.1DIR, а если хотите снимать с него сигнал OUT модуля CCP0 - то на вывод тем же битом P1.1DIR. Конкретно узнать, чем определяется направление порта можно по таблицам, расположенным в разделе описания электрических характеристик портов даташита. Если в графе Direction control from module стоит Px.xDIR - то этим битом, если нет - режимом модуля.

Замечу, что при взведении бита Px.xSEL в портах P1 и P2 отключается логика управления флагом прерывания Px.xIFG на этой ножке. Однако ничто не мешает при необходимости взводить бит Px.xIFG программно, получая таким образом программные прерывания.


10)
Q: Не получается организовать Multiprocessor mode в работе UART. Бит RXWake всегда читается как '0'.
A: Проблема оказалась в программе - сначала читался байт из буфера приема, а потом анализировался регистр URCTL. При чтении буфера статусные биты регистра URCTL сбрасываются в исходное состояние. Регистр URCTL нужно анализировать перед чтением байта из буфера.


11)
Q: Как-то странно работает UART - после окончания передачи пакета сбрасываю бит UTXIFG, чтобы прекрать вызов обработчика прерывания, а он не сбрасывается.
A: Ошибка методическая, видимо влияние длительной работы с MCS-51 :-). Прекращать вызов обработчика нужно не сбросом бита UTXIFG, а сбросом бита разрешения прерывания UTXIE. А разрешать, соответственно, взведением бита UTXIE. Бит UTXIFG показывает состояние буфера передатчика и управляется аппаратно.


12)
Q: Как при написании программы разместить начальные данные в сегменте информационной памяти Flash?
A: В управляющем файле линкера MSP430xxxxxx.xcl определен сегмент INFO. Поместить в него данные можно при помощи команды компилятору #pragma memory = constseg(INFO) и атрибута const. Hапример:

#pragma memory = constseg(INFO)
const char * HelloString="Hello";
const float One = 1.0;
#pragma memory = default;

Эти данные попадут в сегмент INFO при программировании кристалла.


13)
Q: Попытка запрограммировать флеш-память данных из тела программы, расположенной в флеш-памяти кода приводит к "повисанию" процессора. Запись не происходит.
A: Такое действительно происходило в первых инженерных образцах кристаллов PMS430F11x1. Это связано с ошибками в кристалле и устранено в серийных процессорах. Проверьте ваш кристалл по errata на сайте тексаса. Lot Trace Code написан на вашем кристалле под названием (что-то типа 98A5L6T). Запрограммировать флеш данных в кристаллах с этой ошибкой можно, копируя процедуру записи и проверки окончания записи в ОЗУ и выполняя эти команды оттуда, после чего передавать управление обратно на код во флеш. Хотя процессор с такой ошибкой вы навряд ли найдете.


14)
Q: Чем отличается Information Memory от Code Memory?
A: Физически - ничем. Это различные области одной и той же флеш памяти. Единственное отличие - это размер сегмента. Information -128 байт, Code - 512 байт. В кристаллах с 60К флеш памяти есть еще один сегмент размером 256 байт. Таким образом, при необходимости часть сегментов Code Memory можно использовать для хранения редко меняющихся данных, а при нехватке памяти для кода разместить его в Information Memory. Для этого нужно только подправить .xcl-файл.


15)
Q: При подключении к проекту своей процедуры ?C_STARTUP линкер начинает ругаться "Error[e6]: Program module CSTARTUP redeclared in file".
A: В .xcl надо вписать ключ -C. Почему они при компиляции библиотек скомпилили ?C_STARTUP как program а не как module - загадка.


16)
Q: После запуска внешнего XT кварца (бит XTS или XT2ON) и конфигурирования процессора на работу от него процессор продолжает работать от внутреннего DCO (digitally controlled oscillator).
A: Это связано с системой защиты от сбоев кварцевого резонатора. Если выполнить переключение до стабилизации колебаний кварца, система автоматически переключит тактирование процессора обратно на DCO. После включения кварца битом XTS или XT2ON необходимо выждать некоторое время (около 50мкс), после чего можно переключаться на тактирование от него. Определить момент стабилизации колебаний можно периодически сбрасывая и проверяя бит OFIF.

Следует отметить еще одну тонкость - в случае, если процессор тактировался от внешнего кварца и произошел сбой кварца, произойдет переключение на DCO, однако биты SELM.1 и SELM.0 останутся взведенными, т.е. в состоянии "тактирование от XT". Для того, чтобы восстановить работу процессора от XT необходимо сначала переключить эти биты в состояние "тактирование от DCO", а затем обратно в "тактирование от XT". Об этом вскользь упоминается в пункте 7.2.4 "Select DCO Oscillator for MCLK on XT Oscillator Fault", slau049a, стр. 7-8.


17)
Q: Как сделать ассемблерную вставку в программе на IAR С?
A: Прямо в текст вставить кусочек ассемблерного кода не получится. Есть возможность вставить несколько ассемблерных инструкций с помощью intrinsic - функции _OPC(). Можно подключить к проекту функцию, написанную полностью на ассемблере. Как это сделать, как передавать в нее параметры и как из нее передать результат в вызывающую функцию подробно описано в документе slaa140 "Mixing C and Assembler With the MSP430".


18)
Q: Можно ли использовать выводы VeRef+ и VRef-/VeRef- как дополнительные входы АЦП?
A: Да, можно. Это штатный режим работы, если не нужно внешнее опорное напряжение. Таким образом получается 10-входовое АЦП.


19)
Q: Чем можно запрограммировать микропроцессоры серии MSP430?
A: Вопрос навстречу: какой кристалл имено? Если интересуют однократные или отладочные (EEPROM-версии, с окошком), то ввиду закрытости алгоритма программирования через JTAG, только фирменными программаторами от Texas Instruments. Есть, правда, еще вариант купить полноценный внутрисхемный JTAG эмулятор (кто их делает - можно найти на сервере Тексаса).
Texas Instruments выпускал программатор MSP-430PRG, описание работы с ним и его схема находится в файле SLAU026.PDF "MSP430 family programing adapter manual". Файл лежит на сервере TI. Программное обеспечение последней (3.02) версии лежит по адресу в разделе MSP430->Free Tools/Downloads сервера www.ti.com под вывеской Programming Adapter. Программатор подключается через параллельный порт PC и не работает под Windows NT.
Если есть желание запрограммировать кристаллы с флеш-памятью, то ПО JTAG-программатора для них встроено в С-SPY пакета от китов MSP-FET430
В августе 2000г. на сайте появилось описание программатора MSP-PRGS430 (файл SLAU049). Он поддерживает все выпускаемые в данный момент процессоры серии MSP430. Программатор содержит внутри себя процессор MSP430P337 с фирменной прошивкой, поэтому клонированию не поддается... Программное обеспечение состоит из оболочки и драйвера. Форматы вызовов API-функций драйвера описаны, что позволяет написать свою оболочку. Программатор подключается к последовательному порту. Стоимость его порядка $200.
Что же касается описанного в даташите на 430F1хxx bootstraploader, то ситуация такая:
В самых первых партиях кристаллов PMS430F11xx и MSP430F1121IDW была ошибка в прошивке загрузчика и он не работал. Теперь уже кристаллы тех партий найти практически невозможно. Поэтому можно считать, что загрузчик в вашем кристалле будет работоспособен.
На сервере TI и дисках есть документ slaa096b Application of Bootstrap Loader in MSP430F11x - Hardware/Software Proposal размером 389К, а также 37К архив с примером программы на РС (Visual C++, консольное приложение, проверено многими людьми - работает сразу!) для программирования MSP430F1xx используя именно bootstraploader. Приведен один из вариантов схемы программатора (74AHC14, стабилизатор 3В, ОУ).
Описание всех версий загрузчика и всех его команд находится в документе slaa089a.pdf, "Features of the MSP430 Bootstrap Loader".


20)
Q: Чем можно пережечь fuse защиты кода от считывания?
A: Из известных мне средств - только программаторами от TI (MSP-430PRG для однократных, MSP-PRGS430 - для всех). Процесс пережигания fuse требует подачи некоей команды через JTAG, а поскольку весь протокол JTAG держится в секрете, то подручными средствами - увы :(

21)
Q: Если я пережгу fuse, останется ли возможность программирования через bootstrap loader?
A: Да, останется. Fuse всего-лишь отключает от ядра JTAG. А bootstrap loader - обычная программа внутри кристалла, только расположенная в нестираемой части памяти.

22)
Q: В описании bootstrap loader сказано, что 256-битный ключ для чтения программы хранится по адресам 0xFFE0-0xFFFF. Но там же должны быть вектора прерываний?
A: Совершенно верно. Именно содержимое векторов прерываний и является ключом. Чистый кристалл содержит 0xFF в этих ячейках, т.е. ключ нам известен. Именно с этим ключем (все '1') и проводится запись в чистый кристалл.
После записи программы область ключа заполнится векторами прерываний и единственная команда, которая может быть выполнена без знания ключа - стирание всей флеш-памяти, и следовательно - приведение ключа в исходное состояние.
Знать ключ теоретически может только человек, имеющий на руках прошивку кристалла, следовательно ему чтение памяти необходимо явно не для копирования. Задача защиты от копирования выполнена. Время подбора 256-битного ключа сопоставимо с временем разрушения данных во флеш.
Зная ключ (т.е. имея прошивку) при помощи bootstrap loader можно выполнять чтение любой ячейки памяти (SFR, RAM, Flash), запись в любую ячейку, старт программы с любого адреса, стирание сегмента флеш.

23)
Q: Где можно получить консультацию по возникающим вопросам?
A: Есть такие места! Это эхо-конференция ФИДО ru.embedded, конференция "Микроконтроллеры и их применение" на сайте фирмы "Телесистемы" (www.telesys.ru), если владеете английским - можно писать прямо в службу поддержки TI (epic@ti.com), ответ приходит примерно через неделю (мне приходили довольно невразумительные - не повезло мне с вопросами :-). Особо сложные вопросы можно задать непосредственно разработчикам кристаллов через Леонида Верина, ведущего направление MSP430 в "Сканти-Рус" (leo@scanti.ru). Можно писать и мне - буду рад помочь.

И напоследок примечание от Александра Кратько:
Имена файлов (slaa, etc.) им явно в наследство от ДОСа остались, в последнее время они от них уходят и используют "человеческие", типа "MSP430 family user's guide.pdf"


Выражаю благодарность Владимиру Полетаеву (vmp) за помощь в составлении пунктов 1, 9, 18, 22, Дмитрию Дикому - за помощь в пунктах 1, 2.


С уважением, Сергей Борщ

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru