vak: (Default)
[personal profile] vak
Для отладки и программирования микроконтроллеров MSP430 фирма Texas Instruments изобрела протокол, работающий всего по двум проводам: SpyBiWire. Детали протокола не раскрываются, поэтому работать с ним можно только через фирменные библиотеки msp430.dll и hid.dll. Была версия библиотек для Линукса, но она не поддерживает новые модели процессоров. Новые DLL-ки можно добыть из демо-версий TI Code Composer Studio IDE.

Вторая проблема - отсутствие простой удобной утилиты для программирования. Вызывать всякий раз для прошивки аж весь IDE с навороченными гуями откровенно напрягает. Тем более, что программатор нужен под Линукс. В свободном проекте mspgcc есть утилита msp430-jtag, но она тянет за собой python, что не сильно лучше.

Соорудил я простую программку MSP430-PROG.EXE, которая работает в Windows и Linux (Wine), использует фирменные DLL-ки, и почти не глючит. Краткая инструкция здесь. Для установки под Wine надо переписать DLL-ки в ~/.wine/drive_c/windows/ и соорудить симлинк типа "ln -s /dev/ttyUSB0 ~/.wine/dosdevices/com1".

Date: 2009-11-21 08:34 (UTC)
From: [identity profile] dmzlj.livejournal.com
Они вроде не сильно скрывают протокол: во всяком случае, есть slau265a, в котором есть

Replicator Project & Sources for SpyBiWire


в котором есть библиотечка для работы с контроллерами по SBW:

// Low level JTAG functions
static word DR_Shift16_sbw(word Data);
#define DR_Shift16   DR_Shift16_sbw
static word IR_Shift_sbw(byte Instruction);
#define IR_Shift     IR_Shift_sbw
static void ResetTAP_sbw(void);
static word ExecutePUC(void);
static word SetInstrFetch(void);
static void SetPC(word Addr);
static void HaltCPU(void);
static void ReleaseCPU_sbw(void);
static word VerifyPSA_sbw(word StartAddr, word Length, word *DataArray);
#define VerifyPSA       VerifyPSA_sbw

// High level JTAG functions
word GetDevice_sbw(void);
#define GetDevice GetDevice_sbw
void ReleaseDevice(word Addr);
void WriteMem(word Format, word Addr, word Data);
void WriteMemQuick(word StartAddr, word Length, word *DataArray);
void WriteFLASH(word StartAddr, word Length, word *DataArray);
word WriteFLASHallSections(word *DataArray);
word ReadMem(word Format, word Addr);
void ReadMemQuick(word StartAddr, word Length, word *DataArray);
void EraseFLASH(word EraseMode, word EraseAddr);
word EraseCheck(word StartAddr, word Length);
word VerifyMem(word StartAddr, word Length, word *DataArray);
word BlowFuse(void);
word IsFuseBlown(void);


В общем-то, они скрывают вроде бы только отладочные возможности протокола, ну, если судить по протоколу для JTAG.

Но конечно, это для самого интерфейса, я не для TI-шной dll-ки.