urjtag를 FreeBSD의 gpio에서 사용할 수 있도록 시도했습니다.

7738 단어 JTAGFreeBSD
평소에는 Mac OS X에서 UrJTAG를 사용하고 있지만 ByteBlasterMV를 FreeBSD로 시도했습니다. 흐름으로 UrJTAG에 FreeBSD 11R에서 제공되는 libgpio를 사용하는 드라이버를 써 보았다.

Linux 용 gpio.c를 기반으로 jtag의 4 개를 libgpio 함수로 바꿨습니다. 리눅스에서는 하나씩 open하고 fd를 가지고있는 것 같습니다만, libgpio에서는 gpioc를 open하고 그 fd로 함수를 호출하고 있습니다. 여담입니다만, 이 gpio.c가 FreeBSD에서도 컴파일되어 버리고 있는 것 같기 때문에, 컴파일은 통과합니다만, 의미가 없기 때문에 configure.ac의 체크를 재검토하는 것이 좋다고 생각합니다.

코드를 작성하는 것보다 autoconf 설정 을 만드는데 상당히 고생했다.

우선 gpio가 있는 MIPS 라우터용으로 ZRouter의 ports에 던져 빌드해 보았다. ZRouter의 ports는 FreeBSD 본체의 ports와 흐름으로 빌드하지만, Makefile은 여러가지 괴롭혀야 한다.

시험에 RT3050의 JTAG 포트에서 adm5120의 JTAG 포트에 접속해 RT3050에서 UrJTAG를 움직여 보았다. adm5120의 TRST(1)은 100Ω으로 풀업된다.

RT3050은 FDT의 구성으로 커널을 빌드하고 있으며 JTAG 포트는 gpio에서 사용하도록 dts로 설정되어 있습니다. 참고 : sys/mips/mediatek 핀 컨트롤



4개의 2mm에서 2.54mm의 변환 케이블을 QI 커넥터로 만들어 보았습니다. 2mm의 QI 커넥터는 어렵고 별로 맛있게 만들 수 없었기 때문에, 도통 체크하고 우선 사용할 수있는 것 같습니다.
# ./jtag

UrJTAG 0.10 #
Copyright (C) 2002, 2003 ETC s.r.o.
Copyright (C) 2007, 2008, 2009 Kolja Waschk and the respective authors

UrJTAG is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
There is absolutely no warranty for UrJTAG.

warning: UrJTAG may damage your hardware!
Type "quit" to exit, "help" for help.

warning: system error: Read-only file system cannot mkdir(/root/.jtag)
jtag> cable bsdgpio tdi=18 tdo=17 tms=19 tck=20
Initializing GPIO JTAG Chain
jtag> detect
IR length: 5
Chain length: 1
Device Id: 00000000000000000000000000000001 (0x00000001)
  Unknown manufacturer! (00000000000) (/usr/local/share/urjtag/MANUFACTURERS)
jtag> include admtek/adm5120/adm5120
ImpCode=01000001010000000100000000000000 41404000
EJTAG version: 2.6
EJTAG Implementation flags: R4k DINTsup ASID_8 NoDMA MIPS32
Processor entered Debug Mode.
jtag> print
 No. Manufacturer              Part                 Stepping Instruction        
  Register                        
--------------------------------------------------------------------------------
-----------------------------------
   0                                                         EJTAG_DATA         
  EJDATA                          

Active bus:
*0: EJTAG compatible bus driver via PrAcc (JTAG part No. 0)
        start: 0x00000000, length: 0x20000000, data width: 8 bit
        start: 0x20000000, length: 0x20000000, data width: 16 bit
        start: 0x40000000, length: 0x20000000, data width: 32 bit
jtag> peek 0x52000000
URJ_BUS_READ(0x52000000) = 0x34085120 (872960288)
jtag> 

Switch Control Register(Base Address 1200 0000H)의 Code Register(Offset Address 00H)를 32비트로 보았습니다. 하위가 5120이고 데이터시트와 일치하여 올바르게 액세스할 수 있음을 알 수 있습니다.

이 대상의 adm5120p에는 gpio가 4개 있습니다.



148핀에서 151핀까지는 GPIO입니다. 148핀(GPIO3)과 151핀(GPIO0)이 어딘가에 연결되어 있는 것 같습니다.

GPIO 레지스터에 써 봅니다.
jtag> poke 0x520000b8 0x08080000

148 핀 (GPIO3)이 빨간색 LED에 연결되어 있으므로 위의 조작으로 LED가 꺼집니다.

그건 그렇고, GPIO0은 플래시 WP에 연결되어있는 것 같습니다.

ADM5120에서 boot가 남아 있으면 초기화하고 있기 때문에 detectflash를 사용할 수 있지만, Flash가 비워진 경우 등은 초기화가 필요한 것 같습니다.

이 정보는 해외의 사람의 기입이 원래와 같습니다만, 해외의 사람은 다른 타겟으로 시도한 것 같습니다. .

AR5312에서도 시도했습니다.
# /usr/local/bin/jtag

UrJTAG 0.10 #
Copyright (C) 2002, 2003 ETC s.r.o.
Copyright (C) 2007, 2008, 2009 Kolja Waschk and the respective authors

UrJTAG is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
There is absolutely no warranty for UrJTAG.

warning: UrJTAG may damage your hardware!
Type "quit" to exit, "help" for help.

warning: system error: Read-only file system cannot mkdir(/root/.jtag)
jtag> cable bsdgpio tdi=18 tdo=17 tms=19 tck=20
Initializing GPIO JTAG Chain
jtag> detect
IR length: 5
Chain length: 1
Device Id: 00000000000000000000000000000001 (0x00000001)
  Unknown manufacturer! (00000000000) (/usr/local/share/urjtag/MANUFACTURERS)
jtag> include atheros/ar2312/ar2312
ImpCode=01000000010000000100000000000000 40404000
EJTAG version: 2.6
EJTAG Implementation flags: R4k ASID_8 NoDMA MIPS32
Processor entered Debug Mode.
jtag> detectflash 0x3fc00000
Query identification string:
        Primary Algorithm Command Set and Control Interface ID Code: 0x0002 (AMD
/Fujitsu Standard Command Set)
        Alternate Algorithm Command Set and Control Interface ID Code: 0x0000 (n
ull)
Query system interface information:
        Vcc Logic Supply Minimum Write/Erase or Write voltage: 2700 mV
        Vcc Logic Supply Maximum Write/Erase or Write voltage: 3600 mV
        Vpp [Programming] Supply Minimum Write/Erase voltage: 0 mV
        Vpp [Programming] Supply Maximum Write/Erase voltage: 0 mV
        Typical timeout per single byte/word program: 16 us
        Typical timeout for maximum-size multi-byte program: 0 us
        Typical timeout per individual block erase: 1024 ms
        Typical timeout for full chip erase: 0 ms
        Maximum timeout for byte/word program: 512 us
        Maximum timeout for multi-byte program: 0 us
        Maximum timeout per individual block erase: 16384 ms
        Maximum timeout for chip erase: 0 ms
Device geometry definition:
        Device Size: 4194304 B (4096 KiB, 4 MiB)
        Flash Device Interface Code description: 0x0002 (x8/x16)
        Maximum number of bytes in multi-byte program: 1
        Number of Erase Block Regions within device: 2
        Erase Block Region Information:
                Region 0:
                        Erase Block Size: 65536 B (64 KiB)
                        Number of Erase Blocks: 63
                Region 1:
                        Erase Block Size: 8192 B (8 KiB)
                        Number of Erase Blocks: 8
Primary Vendor-Specific Extended Query:
        Major version number: 1
        Minor version number: 1
        Address Sensitive Unlock: Required
        Erase Suspend: Read/write
        Sector Protect: 4 sectors per group
        Sector Temporary Unprotect: Not supported
        Sector Protect/Unprotect Scheme: 29BDS640 mode (Software Command Locking
)
        Simultaneous Operation: Not supported
        Burst Mode Type: Supported
        Page Mode Type: Not supported
        ACC (Acceleration) Supply Minimum: 11500 mV
        ACC (Acceleration) Supply Maximum: 12500 mV
        Top/Bottom Sector Flag: Top boot device
jtag> flashmem 0x3fc00000 redboot.rom noverify
Chip: AMD Flash
        Manufacturer: Macronix
        Chip: Unknown (ID 0x00a7)
        Protected: 0000
program:
flash_unlock_block 0x3FC00000 IGNORE

block 0 unlocked
flash_erase_block 0x3FC00000
flash_erase_block 0x3FC00000 DONE
erasing block 0: 0
addr: 0x3FC02000

RT3050은 300MHz 정도이지만, flshmem 매우 좋다. 제대로 헤아리지 않지만 64K에 몇 시간이 걸릴 것 같습니다. Mac + FDTI보다 느리다고 생각합니다.

쭉 방치하고 있었습니다만, 기억해 marge 리퀘스트 던져 보았습니다. (2017/10/09)

좋은 웹페이지 즐겨찾기