Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Программирующий разъем — десятиконтактный игольчатый IDC (в корпусе) или PLD (бескорпусной), и именно на него будут ориентированы все схемы, приведенные в этой книге. Это не значит, что я вас призываю покупать именно AS — разъем такого типа стал стандартом и его используют многие ISP, кроме упоминавшегося простейшего ISP от самой Atmel, где разъем минимальный — шестиконтактный (три линии собственно SPI, а также два питания и /RESET). Впрочем, всегда можно изготовить переходник, т. к. все последовательные программаторы работают по одним и тем же линиям (в десятиконтактном разъеме "лишние" контакты используются для разделения сигнальных линий "земляными", так же, как в соединительном кабеле IDE-интерфейса жестких дисков).

Внешний вид программирующего разъема PLD-10 на макетной плате и разводка его выводов показана на рис. 5.5. Обратите внимание, что отсчет выводов ведется не по кругу, как для микросхем: в нижнем ряду расположены все нечетные выводы, а в верхнем — четные (это удобно, т. к. не приходится нарушать нумерацию у разъемов с различным числом контактов, когда короткие могут получаться из длинных простым отламыванием лишней части). Естественно, при отсутствии чехла с прорезью ответная часть может быть присоединена двумя способами, потому первый вывод на плате следует помечать (на фото видна черная точка, проставленная фломастером).

О hex-файлах
Двоичное представление команды— командное слово, или код операции (КОП)— компилятор записывает в виде числа в выходной файл с расширением hex, который затем используется программатором для записи в контроллер. Кроме hex-файлов, есть и другие форматы записи готовых программ (самый известный — бинарный), но hex-формат для микроконтроллеров самый распространенный, и мы будем рассматривать только его. Рассматриваемый формат придуман фирмой Intel (есть и другие "гексы") и отличается тем, что содержит числа в текстовом представлении — в шестнад-цатеричной записи. Поэтому в случае чего его можно даже править в обычном текстовом редакторе. Кстати, точно такой же формат применяется для записи констант в EEPROM, если это требуется. Рассмотрим формат HEX подробнее. На рис. 5.6 представлен файл короткой программы, открытый в обычном Блокноте. На первый взгляд тут сам черт ногу сломит, но на самом деле все достаточно просто, хотя чтение затрудняется тем, что строки не поделены на отдельные байты. Разбираться будет проще, если вы скопируете этот файл под другим именем и расставите в нем пробелы после каждой пары символов. Мы же рассмотрим данный файл как есть.

Основную часть файла занимают информационные строки, содержащие непосредственно КОП. Они состоят из ряда служебных полей и собственно данных. Каждая строка начинается двоеточием и заканчивается парой символов "возврат каретки" — "перевод строки", на экране не отображаемых (ср. с протоколом MODBUS", упомянутым в главе 13). После двоеточия идет число байтов в строке — кроме первой и последней, везде стоит, как видите, число 10 (десятичное 16), т.е. в каждой строке будет ровно 16 информационных байтов (исключая служебные).

Затем следуют два байта адреса памяти — куда писать (в первой строке 0000, во второй это будет, естественно, 0010, т. е. предыдущий адрес плюс 16, и т. д.). Наконец, после адреса расположен еще один служебный байт, обозначающий тип данных, который в информационных строках равен 00 (а в первой и последней — 02 и 01, о чем далее). Только после этого начинаются собственно байты данных, которые означают соответствующие КОП, записанные пословно (КОП для AVR, напоминаю, занимают в основном два байта, и память в этих МК также организована пословно), причем так, что младший байт идет первым. Таким образом, запись в первой информационной строке 3AC0 в привычном нам "арабском" порядке, когда самый старший разряд располагается слева, должна выглядеть, как С03А. В первой строке служебный байт типа данных равен 02, и это означает, что данные в ней представляют сегмент памяти, с которого должна начинаться запись (в данном случае 0000). Заканчивается hex-файл всегда строкой :00000001FF— значение типа данных 01 означает конец записи, данных больше не ожидается. А что означает FF?

Самым последним байтом в каждой строке идет контрольная сумма (дополнение до 2, иначе она называется LRC — Longitudinal Redundancy Check) для всех остальных байтов строки, включая служебные. Алгоритм вычисления LRC очень простой — нужно вычесть из числа 256 значения всех байтов строки (не обращая внимание на перенос), и взять младший байт результата. Соответственно, проверка целостности строки еще проще — нужно сложить значения всех байтов (включая контрольную сумму), и младший байт результата должен равняться нулю. Так, в первой строке число информационных байтов всего два, оба равны нулю, плюс (в начале) число информационных байтов, равное 2, плюс служебный байт типа данных, равный также 2, итого контрольная сумма всегда равна 256- 2- 0- 0- 2 = 252 = $FC. В последней строке одни нули, кроме типа данных, равного 1,— соответственно контрольная сумма равна 256 - 1 = 255 = $FF.



     
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru