Особенности внутрисхемного программирования
с помощью программаторов серии Orange.


Введение.


 Внутрисхемное программирование (ICP) - чтение и запись микросхем памяти и микроконтроллеров непосредственно в устройстве, без установки в панель программатора.
Оно может быть использовано как при разработке и серийном производстве, так и при ремонте.

 Преимущества такого способа:
- Нет необходимости в перепайке микросхемы (иногда многократной). Это особенно важно при отладке и ремонте устройств - снижает риск повреждения и укоряет работу.
- Не требуется дорогостоящая панель.
- Работа с микросхемами, хранящими информацию в ОЗУ. При их выпайке и обесточивании данные будут уничтожены.

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

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

Иногда при наладке и ремонте аппаратуры нет необходимости изменять прошивку, достаточно проконтролировать правильность чтения данных микроконтроллером из внешней памяти. В этом случае большую помощь может оказать Логический анализатор с функцией обработки протоколов, например, Omega Logic.
В настройках программатора следует установить значение напряжения питания, соответствующее рабочему напряжению схемы (по умолчанию - 5 Вольт). Необходимо также учитывать, что большая часть выходных цепей программаторов Orange построена по схеме с ОК, напряжение логической 1 формируется с помощью резистора. ISP адаптер имеет симметричные выходы с выходным сопротивлением около 150 Ом.

Рассмотрим стандартные интерфейсы программирования и их использование.

I2C

I2C - универсальная последовательная двухпроводная шина, разработанная Philips. Имеет только две линии - линия данных (SDA) и линия синхронизации (SCL). Обе линии - двунаправленные, с открытым стоком (коллектором), соединенные с положительным питающим напряжением через резистор. Когда шина свободна, обе линии находятся в состоянии логической "1". Каждое устройство, соединенное с шиной является программно-адресуемым. Стандартно на адрес отводится 7 бит, при этом на шине может присутствовать до 112 slave устройств (часть адресов зарезервирована). Возможна и 10 бит адресация, но практически она используется весьма редко. Отношения между устройствами могут быть построены по принципу master/slave или multi-master. Последовательная двунаправленная передача данных может проводиться со скоростью до 100 kbit/s в стандартном режиме или до 400 kbit/s в быстром режиме. Slave при необходимости может замедлять скорость обмена.
К сожалению, во многих реальных устройствах реализованы далеко не все полезные возможности шины I2C, такие как multimaster.

Наиболее распространены микросхемы памяти I2C серии 24cXX.
Они имеют объем от 128 байт до 128 КБайт. Стандартный адрес на шине - 0A0H, но он может быть изменен с помощью специальных адресных выводов. Например, 24C02 имеет 3 адресных входа: A0, A1, A2. Реальный адрес может быть определен по формуле:
ADDR = 0A0h + A0*2 + A1*4 + A2*8
24C16 не имеет адресных входов. При обращении по адресам 0A0h, 0A2h, 0A4h, 0A6h, 0A8h, 0AAh, 0ACh, 0AEh читаются разные страницы памяти.

Микросхемы некоторых производителей, например, Xicor X24C01, Siemens SLA24C02, не имеют возможности выбора адреса, он всегда фиксирован.
Определить рабочий адрес при внутрисхемном программировании программатором Orange можно также с помощью специального модуля I2C Type. Функция I2C Map отображает адреса в виде таблицы 16 x 16. Не равные 0 ячейки соответствуют адресам каких-либо присутствующих на шине устройств.
Установить адрес микросхемы можно в меню программатора Orange:
Буфер - Регистры - I2CADR
Адрес всегда должен иметь четное значение, т.е. младший бит равен нулю.

Следует учитывать, что программатор имеет подтягивающие резисторы номиналом 4.7K. Если это нарушает нормальную работу шины, рекомендуется применять дополнительный ISP адаптер.
В тех случаях, когда процессор периодически обращается к памяти и препятствует работе программатора, рекомендуется пользоваться специальными функциями блочного чтения и записи программатора Orange Read Marked и Write Marked.
Рекомендуется также установить флаг Освобождать шину и сбрасывать флаг Управление питанием в настройках, это  позволит сохранять высокие уровни на SCL и SDA, в перерывах между операциями с микросхемой. 

SPI

  SPI - четырехпроводный последовательный интерфейс. Имеет сигналы CS, CLC, DI, DO. Для подключения нескольких устройств используется несколько независимых сигналов CS. Интерфейс позволяет получить значительно большую, чем I2C скорость обмена (десятки мегагерц). Микросхемы памяти выпускаются с маркировкой 25Cxx. при внутрисхемном программировании необходимо принимать меры по отключению шин процессора от памяти, например, удержанием сброса процессора в активном состоянии на время программирования, физическим отключением цепей и т.д. ...

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

Если длина соединительного кабеля и паразитные емкости не позволяют программатору работать на максимальной скорости, скорость можно замедлить, увеличив значение параметра CDelay (задержка обмена) в меню Orange: Настройки - Микросхема.

Microwire

  Интерфейсы под названием MicroWire и 4-Wire устроены аналогично SPI. Поэтому справедливы все рекомендации, описанные выше. Кроме основных 4 сигналов микросхемы имеют дополнительные управляющие сигналы (ORG, WP...). Они не участвуют в обмене данными, однако их состояние влияет на корректность чтения и записи. Сигнал ORG определяет организацию памяти. В схеме обычно подключен напрямую к цепям Vss или Vcc, поэтому его состояние не может быть изменено без отключения. Физически присутствует не во всех микросхемах, так что состояние вывода не может однозначно указать на используемый режим.

JTAG

  JTAG - специализированный интерфейс для отладки и программирования (IEEE 1149.1). Уникальной особенностью JTAG является возможность программирования не только самого микроконтроллера (или PLD) но и подключенной к его выводам микросхемы FLASH памяти, не имеющей собственного последовательного интерфейса программирования. Порт тестирования (Test Access Port) представляет собой четыре или пять выделенных выводов микросхемы: ТСК, TMS, TDI, TDO, ~TRST (опционально).
Если на плате установлено несколько устройств, они могут быть объединены в общую цепочку.

Microсhip PIC

  Для внутрисхемного программирования необходимо минимум 5 проводов: CLK, DATA, GND, VCC, MCLR (12V) При разработке платы с возможностью внутрисхемного программирования надо помнить следующее:
- Цепь MCLR должна выдерживать высокое напряжение (12V) и при этом не снижать его уровень и скорость нарастания.
- Для корректного входа в режим программирования должна строго выдерживаться последовательность подачи напряжений. Этому могут препятствовать емкости на плате.
- FLASH микроконтроллеры с поддержкой режима низковольтного программирования имеют вход управления PGM (часто он совмещен с RB3 или RB4) Его следует подтягивать к GND через резистор 4.7-10K или напрямую.
- При большой длине соединительных проводов может потребоваться небольшая емкость (300pF) между CLK и GND. Она должна устанавливаться непосредственно у выводов MK.