2-проводной интерфейс для программирования и отладки PDI разработан компанией Atmel.
Программирует Flash-память, EEPOM, Fuse-биты, Lock-биты и сигнатурный код
пользователя. Частота синхронизации программирования 10 МГц при напряжении питания 1,8 В.
Схема макетной платы для программирования ATXMEGA (SCH)
Макетная плата XMEGA (PCB)
Рекомендуемая распиновка разъема PDI:
JTAGICE mkII поддерживает PDI если его серийник начинается с "B0..."
JTAGICE mkII probe |
Target pins |
Squid Cable Colours |
STK600 PDI pinout |
Пример: ATxmega_A4 |
Pin 1 (TCK) |
|
Black |
|
|
Pin 2 (GND) |
GND |
White |
6 |
GND (8) |
Pin 3 (TDO) |
|
Grey |
|
|
Pin 4 (VTref) |
VTref |
Purple |
2 |
Vcc (9) |
Pin 5 (TMS) |
|
Blue |
|
|
Pin 6 (nSRST) |
CLK |
Green |
5 |
PDI_CLK (35) |
Pin 7 (Not connected) |
|
Yellow |
|
|
Pin 8 (nTRST) |
|
Orange |
|
|
Pin 9 (TDI) |
DATA |
Red |
1 |
PDI_DATA (34) |
Pin 10 (GND) |
|
Brown |
|
|
Для разрешения работы PDI необходимо перевести линию PDI_DATA в высокое состояние на время больше минимальной длительности внешнего импульса сброса
и далее удерживать в высоком состоянии 16 тактов PDI_CLK:
PDI_CLK > 10 кГц
Формат данных:
Старт, данные, контроль четности, стоп
Выборка данных происходит по нарастающему фронту PDI_CLK:
Драйвер выхода PDI_DATA активизируется только тогда, когда необходимо изменить состояние выхода из 0 в 1 или из 1 в 0.
Остальное время выход драйвера находится в высокоимпедансном состоянии:
Минимальная задержка перехода из режима RX в режим TX равна двум циклам IDLE:
Контроллер PDI ждет инструкции от программатора.
Для разрешения программирования энергонезависимой памяти необходимо передать инструкцию
KEY и ключ
0x1289AB45CDD888FF.
Набор инструкций:
- Команда LDS/STS предназначена для чтения/записи данных в пространство данных PDIBUS
- Команда LD/ST предназначена для чтения/записи данных в пространство данных PDIBUS с использованием косвенной адресации
- Команда LDCS/STCS предназначена для чтения/записи данных из регистров управления и статуса PDI
- Команда KEY предназначена для настройки ключа активизации
- Команда REPEAT предназначена для настройки счетчика повтора инструкций
.include "ATxmega32A4def.inc"
.def temp = R16
rjmp start
.org 0x0100
start:
cli
ldi temp,LOW(RAMEND) ;Init Stack Pointer
out CPU_SPL,temp
ldi temp,HIGH(RAMEND)
out CPU_SPH,temp
ldi temp, 0xFF
sts PORTB_DIR, temp
loop:
ldi temp, 0xFF
sts PORTB_OUT, temp
rcall delay
ldi temp, 0x00
sts PORTB_OUT, temp
rcall delay
rjmp loop
delay: push temp
ldi temp, 0xFF
delay2: rcall delay1
dec temp
brne delay2
pop temp
ret
delay1: push temp
ldi temp, 0xFF
delay0: dec temp
nop
nop
nop
brne delay0
pop temp
ret