아쉽게도 Jtag 장비가 없지만, Arduino 보드와 Netduino 보드는 가지고 있다.
Netduino 가 제공하는 개발 환경도 좋지만, 지금은 펌웨어를 직접 개발해야 하는 상황인지라,
기존에 있던 펌웨어를 지우고 새로운 펌웨어를 Flash 메모리에 써어 넣어야 한다.
그래서 Arduino 보드를 Jtag 프로그래머로 사용하면 가능할 것 같아 찾아 보았다.
하지만, 세 가지의 문제점이 있다고 이야기 되고 있다.
첫째는 Arduino 보드의 I/O 전압과 Arm 보드의 Jtag 핀의 전압 차이이다.
이 문제는 간단히 전압 강하용 저항을 삽입하거나 Level Converter용 IC를 사용하는 있다.
구체적으로 이야기 하자면 대부분의 Arduino 보드는 5V TTL 호환 I/O를 구성되어 있고
Arm 보드의 핀은 3.3V, 혹은 1.8V에서 동작한다.
언듯 생각해 보아도 5V에서 3.3V혹은 1.8V로의 전압 하강은
간단히 저항으로 해결될 수 있는 부분이지만,
3.3V 혹은 1.8V의 전압을 5V로 전압 상승하는 부분은 저항으로 해결 될 수 없다.
이 부분에 대한 해결책으로 아무래도 양방향성 전압 변환기를 사용하는 것 밖에 없는 것 같다.
고속의 신호를 스위칭 할 수 있는 MOSFET을 이용하거나
NC7SZ384 -
http://www.fairchildsemi.com/pf/NC/NC7SZ384.html
I2C 신호선의 Level 변환에 사용되는 IC등을 사용하는 것이다.
LTC4300A-2 http://www.linear.com/pc/productDetail.jsp?navId=H0,C1,C1007,C1070,P2296
PCA9306 http://focus.ti.com/docs/prod/folders/print/pca9306.html
둘째는 전송 속도에 관한 문제이다.
Arduino 보드는 PC와 시리얼로 연결된다.
그래서 아마도 115200bps이상의 속도는 나오지 못할 것이다.
결과적으로 Arduino 보드를 이용하면 디버깅은 조금 느릴 것이다.
하지만, 업로드와 플레시 메모리 쓰기 정도에는 적절할 것이다.
셋째는 구현 소프트 웨어 이다.
대부분의 Jtag 동글은 USB 전송 위에 SPI 인터페이스 형태로 구현된다.
그 이외의 나머지 부분은 PC상의 소프트웨어에서 구현된다.
대표적인 것들이 OpenOCD와 URJTag등이다.
위와 같은 사항을 염두해 둔다면
문제가 되는 것은 Arduino 보드의 펌웨어를 작성하는 것이다.
이것도 이미 구현되어 있다.
https://github.com/zoobab/tjtag-arduino
위의 링크에 가면 Arduino를 위한 소프트웨어와 PC에서 사용할 수 있는
소프트웨어를 다운로드 받을 수 있다.
하지만, 실제로 프로그램을 실행한 결과 모든 Arm 플렛폼과 메모리를 지원하는 것은 아닌것 같다.
지원하는 플렛폼은
{ 0x0471017F, 5, "Broadcom BCM4702 Rev 1 CPU" },
{ 0x9470417F, 8, "Broadcom BCM4704 KPBG Rev 9 CPU"}, // Tornado WRT150N
{ 0x0470417F, 8, "Broadcom BCM4704 Rev 8 CPU" }, // BCM4704 chip (used in the WRTSL54GS units)
{ 0x1471217F, 8, "Broadcom BCM4712 Rev 1 CPU" },
{ 0x2471217F, 8, "Broadcom BCM4712 Rev 2 CPU" },
{ 0x1471617F, 8, "Broadcom BCM4716 Rev 1 CPU" }, // Eko BCM4718A1KFBG
{ 0x0478517F, 8, "Broadcom BCM4785 Rev 1 CPU" }, // Tornado WRT350N
{ 0x0535017F, 8, "Broadcom BCM5350 Rev 1 CPU" },
{ 0x0535217F, 8, "Broadcom BCM5352 Rev 1 CPU" },
{ 0x1535417F, 8, "Broadcom BCM5354 KFBG Rev 1 CPU" }, // Tornado - WRT54G GV8/GSV7
{ 0x2535417F, 8, "Broadcom BCM5354 KFBG Rev 2 CPU" }, // Tornado - Gv8/GSv7
{ 0x3535417F, 8, "Broadcom BCM5354 KFBG Rev 3 CPU" }, // Tornado - WRG54G2
{ 0x0334517F, 5, "Broadcom BCM3345 KPB Rev 1 CPU" }, // Eko QAMLink BCM3345 KPB SB4200
{ 0x0536517F, 8, "Broadcom BCM5365 Rev 1 CPU" }, // BCM5365 Not Completely Verified Yet
{ 0x1536517F, 8, "Broadcom BCM5365 Rev 1 CPU" }, // Eko....ASUS WL 500 G Deluxe
{ 0x0634517F, 5, "Broadcom BCM6345 Rev 1 CPU" }, // BCM6345 Not Completely Verified Yet
{ 0x0634817F, 5, "Broadcom BCM6348 Rev 1 CPU" },
{ 0x0633817F, 5, "Broadcom BCM6338 Rev 1 CPU" },
// Speedtouch
{ 0x0635817F, 5, "Broadcom BCM6358 Rev 1 CPU" }, // brjtag Fully Tested
{ 0x0636817F, 5, "Broadcom BCM6368 Rev 1 CPU" }, // brjtag
{ 0x1432117F, 5, "Broadcom BCM4321 RADIO STOP" }, // Radio JP3 on a WRT300N V1.1
{ 0x3432117F, 5, "Broadcom BCM4321L RADIO STOP"}, // EKO Radio on WRT300n
{ 0x0000100F, 5, "TI AR7WRD TNETD7300GDU Rev 1 CPU" }, // TI AR7WRD Only Partially Verified
{ 0x102002E1, 5, "BRECIS MSP2007-CA-A1 CPU" }, // BRECIS chip - Not Completely Verified Yet
{ 0x0B52D02F, 5, "TI TNETV1060GDW CPU" }, // Fox WRTP54G
{ 0x00217067, 5, "Linkstation 2 with RISC K4C chip" }, // Not verified
{ 0x00000001, 5, "Atheros AR531X/231X CPU" }, // WHR-HP-AG108
{ 0x19277013, 7, "XScale IXP42X 266mhz" }, // GW2348-2 Eko Gateworks Avila GW234X (IXP42X 266MHz) BE
{ 0x19275013, 7, "XScale IXP42X 400mhz" },
{ 0x19274013, 7, "XScale IXP42X 533mhz" },
{ 0x10940027, 4, "ARM 940T"}, // Eko Linksys BEFSX41
{ 0x07926041, 4, "Marvell Feroceon 88F5181" },
{ 0x1438000D, 5, "LX4380"},
이다. 대부분이 Broadcom의 씨피유이다.
지원하는 메모리는 다음과 같다.
/* AMD, Spansion */
{ 0x00C2, 0x22DA, size1MB, CMD_TYPE_AMD, "MX29LV800BTC 512kx16 TopB (1MB)" ,15,size32K, 1,size16K, 2,size4K, 1,size8K },
{ 0x00C2, 0x225B, size1MB, CMD_TYPE_AMD, "MX29LV800BTC 512kx16 BotB (1MB)" ,1,size8K, 2,size4K, 1,size16K, 15,size32K },
{ 0x0001, 0x2249, size2MB, CMD_TYPE_AMD, "AMD 29lv160DB 1Mx16 BotB (2MB)" ,1,size16K, 2,size8K, 1,size32K, 31,size64K }, /* bypass */
{ 0x0001, 0x22c4, size2MB, CMD_TYPE_AMD, "AMD 29lv160DT 1Mx16 TopB (2MB)" ,31,size64K, 1,size32K, 2,size8K, 1,size16K },
{ 0x007F, 0x2249, size2MB, CMD_TYPE_AMD, "EON EN29LV160A 1Mx16 BotB (2MB)" ,1,size16K, 2,size8K, 1,size32K, 31,size64K }, /* bypass */
{ 0x007F, 0x22C4, size2MB, CMD_TYPE_AMD, "EON EN29LV160A 1Mx16 TopB (2MB)" ,31,size64K, 1,size32K, 2,size8K, 1,size16K },
{ 0x0004, 0x2249, size2MB, CMD_TYPE_AMD, "MBM29LV160B 1Mx16 BotB (2MB)" ,1,size16K, 2,size8K, 1,size32K, 31,size64K },
{ 0x0004, 0x22c4, size2MB, CMD_TYPE_AMD, "MBM29LV160T 1Mx16 TopB (2MB)" ,31,size64K, 1,size32K, 2,size8K, 1,size16K },
{ 0x00C2, 0x2249, size2MB, CMD_TYPE_AMD, "MX29LV160CB 1Mx16 BotB (2MB)" ,1,size16K, 2,size8K, 1,size32K, 31,size64K },
{ 0x00C2, 0x22c4, size2MB, CMD_TYPE_AMD, "MX29LV160CT 1Mx16 TopB (2MB)" ,31,size64K, 1,size32K, 2,size8K, 1,size16K },
{ 0x00EC, 0x2275, size2MB, CMD_TYPE_AMD, "K8D1716UTC 1Mx16 TopB (2MB)" ,31,size64K, 8,size8K, 0,0, 0,0 },
{ 0x00EC, 0x2277, size2MB, CMD_TYPE_AMD, "K8D1716UBC 1Mx16 BotB (2MB)" ,8,size8K, 31,size64K, 0,0, 0,0 }, /* bypass */
{ 0x0020, 0x2249, size2MB, CMD_TYPE_AMD, "ST M29W160EB 1Mx16 BotB (2MB)" ,1,size16K, 2,size8K, 1,size32K, 31,size64K },
{ 0x0020, 0x22c4, size2MB, CMD_TYPE_AMD, "ST M29W160ET 1Mx16 TopB (2MB)" ,31,size64K, 1,size32K, 2,size8K, 1,size16K },
{ 0x00C2, 0x0014, size2MB, CMD_TYPE_SPI, "Macronix MX25L160A (2MB) Serial" ,32,size64K, 0,0, 0,0, 0,0 }, /* new */
{ 0x001f, 0x2600, size2MB, CMD_TYPE_SPI, "Atmel AT45DB161B (2MB) Serial" ,512,sizeA4K, 0,0, 0,0, 0,0 }, /* new */
{ 0x0040, 0x0000, size2MB, CMD_TYPE_SPI, "Atmel AT45DB161B (2MB) Serial" ,512,sizeA4K, 0,0, 0,0, 0,0 }, /* new */
{ 0x00EC, 0x22A0, size4MB, CMD_TYPE_AMD, "K8D3216UTC 2Mx16 TopB (4MB)" ,63,size64K, 8,size8K, 0,0, 0,0 },
{ 0x00EC, 0x22A2, size4MB, CMD_TYPE_AMD, "K8D3216UBC 2Mx16 BotB (4MB)" ,8,size8K, 63,size64K, 0,0, 0,0 },
{ 0x00C2, 0x2015, size2MB, CMD_TYPE_SPI, "Macronix MX25L1605D (2MB) Serial" ,32,size64K, 0,0, 0,0, 0,0 }, /* new */
{ 0x00C2, 0x2016, size4MB, CMD_TYPE_SPI, "Macronix MX25L3205D (4MB) Serial" ,64,size64K, 0,0, 0,0, 0,0 }, /* new */
{ 0x00C2, 0x2017, size8MB, CMD_TYPE_SPI, "Macronix MX25L6405D (8MB) Serial" ,128,size64K, 0,0, 0,0, 0,0 }, /* new */
{ 0x0020, 0x2015, size2MB, CMD_TYPE_SPI, "STMicro M25P16 (2MB) Serial" ,32,size64K, 0,0, 0,0, 0,0 }, /* new */
{ 0x0020, 0x2016, size4MB, CMD_TYPE_SPI, "STMicro M25P32 (4MB) Serial" ,64,size64K, 0,0, 0,0, 0,0 }, /* new */
{ 0x0020, 0x2017, size8MB, CMD_TYPE_SPI, "STMicro M25P64 (8MB) Serial" ,128,size64K, 0,0, 0,0, 0,0 }, /* new */
{ 0x0020, 0x2018, size16MB, CMD_TYPE_SPI, "STMicro M25P128 (16MB) Serial" ,32,size256K, 0,0, 0,0, 0,0 }, /* new */
{ 0x0001, 0x2200, size4MB, CMD_TYPE_AMD, "AMD 29lv320MB 2Mx16 BotB (4MB)" ,8,size8K, 63,size64K, 0,0, 0,0 },
{ 0x0001, 0x227E, size4MB, CMD_TYPE_AMD, "AMD 29lv320MT 2Mx16 TopB (4MB)" ,63,size64K, 8,size8K, 0,0, 0,0 },
{ 0x0001, 0x2201, size4MB, CMD_TYPE_AMD, "AMD 29lv320MT 2Mx16 TopB (4MB)" ,63,size64K, 8,size8K, 0,0, 0,0 },
{ 0x0098, 0x009C, size4MB, CMD_TYPE_AMD, "TC58FVB321 2Mx16 BotB (4MB)" ,1,size16K, 2,size8K, 1,size32K, 63,size64K },
{ 0x0098, 0x009A, size4MB, CMD_TYPE_AMD, "TC58FVT321 2Mx16 TopB (4MB)" ,63,size64K, 1,size32K, 2,size8K, 1,size16K },
{ 0x001F, 0x00C0, size4MB, CMD_TYPE_AMD, "AT49BV/LV16X 2Mx16 BotB (4MB)" ,8,size8K, 63,size64K, 0,0, 0,0 },
{ 0x001F, 0x00C2, size4MB, CMD_TYPE_AMD, "AT49BV/LV16XT 2Mx16 TopB (4MB)" ,63,size64K, 8,size8K, 0,0, 0,0 },
{ 0x0004, 0x2253, size4MB, CMD_TYPE_AMD, "MBM29DL323BE 2Mx16 BotB (4MB)" ,8,size8K, 63,size64K, 0,0, 0,0 },
{ 0x0004, 0x2250, size4MB, CMD_TYPE_AMD, "MBM29DL323TE 2Mx16 TopB (4MB)" ,63,size64K, 8,size8K, 0,0, 0,0 },
{ 0x0001, 0x22f9, size4MB, CMD_TYPE_AMD, "AMD 29lv320DB 2Mx16 BotB (4MB)" ,8,size8K, 63,size64K, 0,0, 0,0 },
{ 0x0001, 0x22f6, size4MB, CMD_TYPE_AMD, "AMD 29lv320DT 2Mx16 TopB (4MB)" ,63,size64K, 8,size8K, 0,0, 0,0 },
{ 0x0004, 0x22F9, size4MB, CMD_TYPE_AMD, "MBM29LV320BE 2Mx16 BotB (4MB)" ,1,size16K, 2,size8K, 1,size32K, 63,size64K },
{ 0x0004, 0x22F6, size4MB, CMD_TYPE_AMD, "MBM29LV320TE 2Mx16 TopB (4MB)" ,63,size64K, 1,size32K, 2,size8K, 1,size16K },
{ 0x00C2, 0x22A8, size4MB, CMD_TYPE_AMD, "MX29LV320B 2Mx16 BotB (4MB)" ,8,size8K, 63,size64K, 0,0, 0,0 },
{ 0x00C2, 0x00A8, size4MB, CMD_TYPE_AMD, "MX29LV320B 2Mx16 BotB (4MB)" ,8,size8K, 63,size64K, 0,0, 0,0 },
{ 0x00C2, 0x00A7, size4MB, CMD_TYPE_AMD, "MX29LV320T 2Mx16 TopB (4MB)" ,63,size64K, 8,size8K, 0,0, 0,0 },
{ 0x00C2, 0x22A7, size4MB, CMD_TYPE_AMD, "MX29LV320T 2Mx16 TopB (4MB)" ,63,size64K, 8,size8K, 0,0, 0,0 },
{ 0x0020, 0x22CB, size4MB, CMD_TYPE_AMD, "ST 29w320DB 2Mx16 BotB (4MB)" ,1,size16K, 2,size8K, 1,size32K, 63,size64K },
{ 0x0020, 0x22CA, size4MB, CMD_TYPE_AMD, "ST 29w320DT 2Mx16 TopB (4MB)" ,63,size64K, 1,size32K, 2,size8K, 1,size16K },
{ 0x00C2, 0x22C9, size16MB, CMD_TYPE_AMD, "MX29LV640B 4Mx16 TopB (16MB)" ,127,size64K, 8,size8K, 0,0, 0,0 },
{ 0x00C2, 0x22CB, size16MB, CMD_TYPE_AMD, "MX29LV640B 4Mx16 BotB (16MB)" ,8,size8K, 127,size64K, 0,0, 0,0 },
{ 0x00DA, 0x22BA, size4MB, CMD_TYPE_AMD, "W19B(L)320ST 2Mx16 TopB (4MB)" ,63,size64K, 8,size8K, 0,0, 0,0 }, /* new */
{ 0x00DA, 0x222A, size4MB, CMD_TYPE_AMD, "W19B(L)320SB 2Mx16 BotB (4MB)" ,8,size8K, 63,size64K, 0,0, 0,0 }, /* new */
{ 0x22DA, 0x222A, size4MB, CMD_TYPE_AMD, "W19B(L)320SB 2Mx16 BotB (4MB)" ,8,size8K, 63,size64K, 0,0, 0,0 },
{ 0x0020, 0x225C, size4MB, CMD_TYPE_AMD, "M29DW324DT 2Mx16 TopB (4MB)" ,63,size64K, 8,size8K, 0,0, 0,0 }, /* new */
{ 0x0020, 0x225D, size4MB, CMD_TYPE_AMD, "M29DW324DB 2Mx16 BotB (4MB)" ,8,size8K, 63,size64K, 0,0, 0,0 }, /* new */
{ 0x0098, 0x0057, size8MB, CMD_TYPE_AMD, "TC58FVM6T2A 4Mx16 TopB (8MB)" ,127,size64K, 8,size8K, 0,0, 0,0 }, /* new */
{ 0x0098, 0x0058, size8MB, CMD_TYPE_AMD, "TC58FVM6B2A 4Mx16 BopB (8MB)" ,8,size8K, 127,size64K, 0,0, 0,0 }, /* new */
{ 0x00EC, 0x22E0, size8MB, CMD_TYPE_AMD, "K8D6316UTM 4Mx16 TopB (8MB)" ,127,size64K, 8,size8K, 0,0, 0,0 }, /* new */
{ 0x00EC, 0x22E2, size8MB, CMD_TYPE_AMD, "K8D6316UBM 4Mx16 BotB (8MB)" ,8,size8K, 127,size64K, 0,0, 0,0 }, /* new */
/* BSC */
{ 0x0089, 0x8891, size2MB, CMD_TYPE_BSC, "Intel 28F160B3 1Mx16 BotB (2MB)" ,8,size8K, 31,size64K, 0,0, 0,0 },
{ 0x0089, 0x8890, size2MB, CMD_TYPE_BSC, "Intel 28F160B3 1Mx16 TopB (2MB)" ,31,size64K, 8,size8K, 0,0, 0,0 },
{ 0x0089, 0x88C3, size2MB, CMD_TYPE_BSC, "Intel 28F160C3 1Mx16 BotB (2MB)" ,8,size8K, 31,size64K, 0,0, 0,0 },
{ 0x0089, 0x88C2, size2MB, CMD_TYPE_BSC, "Intel 28F160C3 1Mx16 TopB (2MB)" ,31,size64K, 8,size8K, 0,0, 0,0 },
{ 0x0089, 0x8897, size4MB, CMD_TYPE_BSC, "Intel 28F320B3 2Mx16 BotB (4MB)" ,8,size8K, 63,size64K, 0,0, 0,0 },
{ 0x0089, 0x8896, size4MB, CMD_TYPE_BSC, "Intel 28F320B3 2Mx16 TopB (4MB)" ,63,size64K, 8,size8K, 0,0, 0,0 },
{ 0x0089, 0x88C5, size4MB, CMD_TYPE_BSC, "Intel 28F320C3 2Mx16 BotB (4MB)" ,8,size8K, 63,size64K, 0,0, 0,0 },
{ 0x0089, 0x88C4, size4MB, CMD_TYPE_BSC, "Intel 28F320C3 2Mx16 TopB (4MB)" ,63,size64K, 8,size8K, 0,0, 0,0 },
{ 0x00b0, 0x00e3, size4MB, CMD_TYPE_BSC, "Sharp 28F320BJE 2Mx16 BotB (4MB)" ,8,size8K, 63,size64K, 0,0, 0,0 },
{ 0x0089, 0x8899, size8MB, CMD_TYPE_BSC, "Intel 28F640B3 4Mx16 BotB (8MB)" ,8,size8K, 127,size64K, 0,0, 0,0 },
{ 0x0089, 0x8898, size8MB, CMD_TYPE_BSC, "Intel 28F640B3 4Mx16 TopB (8MB)" ,127,size64K, 8,size8K, 0,0, 0,0 },
{ 0x0089, 0x88CD, size8MB, CMD_TYPE_BSC, "Intel 28F640C3 4Mx16 BotB (8MB)" ,8,size8K, 127,size64K, 0,0, 0,0 },
{ 0x0089, 0x88CC, size8MB, CMD_TYPE_BSC, "Intel 28F640C3 4Mx16 TopB (8MB)" ,127,size64K, 8,size8K, 0,0, 0,0 },
/* SCS */
{ 0x00b0, 0x00d0, size2MB, CMD_TYPE_SCS, "Intel 28F160S3/5 1Mx16 (2MB)" ,32,size64K, 0,0, 0,0, 0,0 },
{ 0x0089, 0x0016, size4MB, CMD_TYPE_SCS, "Intel 28F320J3 2Mx16 (4MB)" ,32,size128K, 0,0, 0,0, 0,0 },
{ 0x0089, 0x0014, size4MB, CMD_TYPE_SCS, "Intel 28F320J5 2Mx16 (4MB)" ,32,size128K, 0,0, 0,0, 0,0 },
{ 0x00b0, 0x00d4, size4MB, CMD_TYPE_SCS, "Intel 28F320S3/5 2Mx16 (4MB)" ,64,size64K, 0,0, 0,0, 0,0 },
{ 0x0089, 0x0017, size8MB, CMD_TYPE_SCS, "Intel 28F640J3 4Mx16 (8MB)" ,64,size128K, 0,0, 0,0, 0,0 },
{ 0x0089, 0x0015, size8MB, CMD_TYPE_SCS, "Intel 28F640J5 4Mx16 (8MB)" ,64,size128K, 0,0, 0,0, 0,0 },
{ 0x0089, 0x0018, size16MB, CMD_TYPE_SCS, "Intel 28F128J3 8Mx16 (16MB)" ,128,size128K, 0,0, 0,0, 0,0 },
/* SST */
{ 0x00BF, 0x234B, size2MB, CMD_TYPE_SST, "SST39VF1601 1Mx16 BotB (2MB)" ,8,size8K, 31,size64K, 0,0, 0,0 },
{ 0x00BF, 0x234A, size2MB, CMD_TYPE_SST, "SST39VF1602 1Mx16 TopB (2MB)" ,31,size64K, 8,size8K, 0,0, 0,0 },
{ 0x00BF, 0x235B, size4MB, CMD_TYPE_SST, "SST39VF3201 2Mx16 BotB (4MB)" ,8,size8K, 63,size64K, 0,0, 0,0 },
{ 0x00BF, 0x235A, size4MB, CMD_TYPE_SST, "SST39VF3202 2Mx16 TopB (4MB)" ,63,size64K, 8,size8K, 0,0, 0,0 },
{ 0x00BF, 0x236B, size8MB, CMD_TYPE_SST, "SST39VF6401 4Mx16 BotB (8MB)" ,8,size8K, 127,size64K, 0,0, 0,0 },
{ 0x00BF, 0x236A, size8MB, CMD_TYPE_SST, "SST39VF6402 4Mx16 TopB (8MB)" ,127,size64K, 8,size8K, 0,0, 0,0 },
{ 0x00BF, 0x236D, size8MB, CMD_TYPE_SST, "SST39VF6401B 4Mx16 BotB (8MB)" ,8,size8K, 127,size64K, 0,0, 0,0 },
{ 0x00BF, 0x236C, size8MB, CMD_TYPE_SST, "SST39VF6402B 4Mx16 TopB (8MB)" ,127,size64K, 8,size8K, 0,0, 0,0 },
// See Spansion hack details for reasoning for the unusual vendid
{ 0x017E, 0x1A00, size4MB, CMD_TYPE_AMD, "Spansion S29GL032M BotB (4MB)" ,8,size8K, 63,size64K, 0,0, 0,0 },
{ 0x017E, 0x1A01, size4MB, CMD_TYPE_AMD, "Spansion S29GL032M TopB (4MB)" ,63,size64K, 8,size8K, 0,0, 0,0 },
{ 0x017E, 0x1000, size8MB, CMD_TYPE_AMD, "Spansion S29GL064M BotB (8MB)" ,8,size8K, 127,size64K, 0,0, 0,0 },
{ 0x017E, 0x1001, size8MB, CMD_TYPE_AMD, "Spansion S29GL064M TopB (8MB)" ,127,size64K, 8,size8K, 0,0, 0,0 },
{ 0x017E, 0x2101, size16MB, CMD_TYPE_AMD, "Spansion S29GL128P U (16MB)" ,128,size128K, 0,0, 0,0, 0,0 },
{ 0x017E, 0x1200, size16MB, CMD_TYPE_AMD, "Spansion S29GL128M U (16MB)" ,128,size128K, 0,0, 0,0, 0,0 },
{ 0x017E, 0x2201, size32MB, CMD_TYPE_AMD, "Spansion S29GL256P U (32MB)" ,256,size128K, 0,0, 0,0, 0,0 },
{ 0x017E, 0x2301, size64MB, CMD_TYPE_AMD, "Spansion S29GL512P U (64MB)" ,512,size128K, 0,0, 0,0, 0,0 },
{ 0x017E, 0x2801, size128MB, CMD_TYPE_AMD, "Spansion S29GL01GP U (128MB)" ,1024,size128K, 0,0, 0,0, 0,0 },
{ 0x0001, 0x0214, size2MB, CMD_TYPE_SPI, "Spansion S25FL016A (2MB) Serial" ,32,size64K, 0,0, 0,0, 0,0 }, /* new */
{ 0x0001, 0x0215, size4MB, CMD_TYPE_SPI, "Spansion S25FL032A (4MB) Serial" ,64,size64K, 0,0, 0,0, 0,0 }, /* new */
{ 0x0001, 0x0216, size8MB, CMD_TYPE_SPI, "Spansion S25FL064A (8MB) Serial" ,128,size64K, 0,0, 0,0, 0,0 }, /* new */
// Winbond 3-stage ID chips
{ 0xDA7E, 0x0A00, size4MB, CMD_TYPE_AMD, "Winbond W19B320AB BotB (4MB)" ,8,size8K, 63,size64K, 0,0, 0,0 },
{ 0xDA7E, 0x0A01, size4MB, CMD_TYPE_AMD, "Winbond W19B320AT TopB (4MB)" ,63,size64K, 8,size8K, 0,0, 0,0 },
{ 0x00EF, 0x3016, size4MB, CMD_TYPE_SPI, "Winbond W25X32 (4MB) Serial" ,64,size64K, 0,0, 0,0, 0,0 }, /* new */
{ 0x00EF, 0x3017, size8MB, CMD_TYPE_SPI, "Winbond W25X64 (8MB) Serial" ,128,size64K, 0,0, 0,0, 0,0 }, /* new */
// EON
{ 0x007f, 0x22F9, size4MB, CMD_TYPE_AMD, "EON EN29LV320 2Mx16 BotB (4MB)" ,8,size8K, 63,size64K, 0,0, 0,0 }, /* wrt54gl v1.1 */
{ 0x007f, 0x22F6, size4MB, CMD_TYPE_AMD, "EON EN29LV320 2Mx16 TopB (4MB)" ,63,size64K, 8,size8K, 0,0, 0,0 }, /* bypass */
{ 0x007F, 0x22C9, size8MB, CMD_TYPE_AMD, "EON EN29LV640 4Mx16 TopB (8MB)" ,127,size64K, 8,size8K, 0,0, 0,0 }, /* bypass */
{ 0x007F, 0x22Cb, size8MB, CMD_TYPE_AMD, "EON EN29LV640 4Mx16 BotB (8MB)" ,8,size8K, 127,size64K, 0,0, 0,0 }, /* bypass */
// Atmel
{ 0x001F, 0x00C8, size4MB, CMD_TYPE_AMD, "AT49BV322A 2Mx16 BotB (4MB)" ,8,size8K, 63,size64K, 0,0, 0,0 },
{ 0x001F, 0x00C9, size4MB, CMD_TYPE_AMD, "AT49BV322A(T) 2Mx16 TopB (4MB)" ,63,size64K, 8,size8K, 0,0, 0,0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
결론적으로 내가 가지고 있는 Netduino Plus 2에는 사용할 수 없다.
뭐 소스코드를 수정하는 방법이 있겠지만, 너무 노력이 많이 들어 간다.
아쉽지만, Jtag 장비를 하나 사야 겠다.
출처 :
http://www.dd-wrt.com/phpBB2/viewtopic.php?p=435578&sid=0c7c7b114dc7239be2620514cecbe2d8
http://electronics.stackexchange.com/questions/9258/is-it-possible-to-make-a-jtag-interface-with-an-arduino
https://github.com/zoobab/tjtag-arduino
http://electronics.stackexchange.com/questions/708/i2c-3-3-to-5-0-v-conversion