내 생일 선물

  예전 언젠가 큰 아이가 나에게 '아빠! 이번 아빠 생일에 뭐 받고 싶어? 내가 생일 선물 사줄께!' 말을 한적이 있었다. 가족 생일이면 어느날 어머니께서 아침에 끓여 주신 미역국을 먹고 학교 다니던 기억밖에 없던 학창 시절을 지나고 어느덧 가정을 꾸려 지내던 어느날, 생일날에는 생일 선물을 주고 받아야 한다는 관습을 알게된 큰 아이의 질문이 잠깐 당황스러웠다. 그 전에도 이런 질문을 받아 봤는지, 내가 다른 이에게 이런 질문을 해봤었는지 기억이 가물가물할 정도의 생활 패턴을 가진 이는 나 말고 좀 더 있지 않을까?... 아이의 질문을 받고 바로 답할게 없어, '나중에 생각 나면 말해 줄까?' 대답했다.
  컴퓨터 모니터에서 쏟아져 나오는 피곤한 광선을 피해 잠깐 회사 3층 테라스에서 봄날 따사로운 햇빛과 함께 달달한 믹스커피를 종이컵에 담아 마시며 큰 아이에게 답할 '내 생일에 받고 싶은 선물'을 고민해 봤다.
  어렸을적엔 갖고 싶은 것도, 먹고 싶은 것도 참 많았었던거 같은데 어느새 다 큰 어른이된 지금에는 그 갖고 싶고, 먹고 싶던 그 무엇들이 생각이 나질 않는다. 생각이 나질 않는 것인지 아니면 그 욕구가 충족되어 버렸는지 도무지 모르겠다. 바닷물은 채워도 사람 욕심은 채울 수가 없다던데, 내 욕심이 다른 무엇인가로 채워 졌나? 그럴리가 있나?... 아이가 나에게 해줄 수 있는 '정도'라는 한계에 대한 현실적인 인식 탓에 축소된 범위 안에 '내가 갖고 싶은 생일 선물'이 없던 것일까? 그런 의식의 범위를 벗어나, 진짜 내가 갖고 싶은게 무엇인지도 고민해 봤지만 도무지 '지금 내가 갖고 싶은것'이 생각 나는게 없다.
  집에 돌아가 같은 질문을 하는 아이를 안고서는 '아빠는 필요한게 다 있어서 갖고 싶은게 없는데 어쩌지? 하하하' 솔직하게 대답해 줬다. '생일에는 생일 선물 받아야 하니까 나에게 알려줘야해!!' 하는 아이의 대답에 또 말문이 막혀 웃어주기만 했다.
  내 생일날 저녁, 아내가 차려준 푸짐한 저녁식사를 하면서 생일케익의 촛불은 아이들이 번갈아 가면서 꺼야 해서 생일 축하 곡은 한 2~3번 부른거 같다. 그 날은 생일 선물 대신 '아빠 생일 축하해!!' 색종이에 삐뚤삐뚤 씌여진 아이들의 편지를 받았다. 색종이 뒷면에 크래파스로 그린 아빠, 내 모습은 그럴싸 하게 나와 닮아 있었다.

무려 90년대 음악임...

Rage Against The Machine - Killing in the Name

Rage Against The Machine - Testify

Rage Against The Machine - Guerrilla Radio

Rage Against The Machine - Take the Power Back

Rage Against The Machine - No Shelter

Goodbye to Romance


블랙사바스 오지오스본이 배나온 아저씨가 되어 다시 부르는 굿바이 투 로맨스를 봤다.
본인의 의도인지 모르겠으나, 수천 수만번 무대에 올랐을 오지의 아마추어같은 무대 안절부절함이 곡과 참 잘 어울리는것 같다.

노래 실력 참 별로인 아저씨인데 뭔가 끌리는게 있단 말이지...

눈에 띄는 유튜브 댓글이 보인다.

'Instant tears every time I hear this one...'
(by Nicolas Ruvalcaba)

사월 1 5 총선






문대통령 임기가 2년밖에 남지 않았음을 이제야 인지 했다.
문정부의 완전체를 기원하며...

그래도 말이지...

아직 귀에 들어오는 음악이 있다는게 좋을 뿐이고...
앰프에 베이스와 트레블 노브가 있으면 일단 둘다 최대로 올리고...

Dance Monkey - Metal cover by Leo Moracchioli feat. Rabea & Hannah

Sultans of Swing - Metal cover by Leo Moracchioli feat. Mary Spender

Africa - Metal cover by Leo Moracchioli feat. Rabea & Hannah

Wolf Totem - The HU


Naked in the Rain - Dio

Heaven And Hell - Dio

Bad Boys - Metal cover by Leo Moracchioli

Another Brick In The Wall - Korn

All the Things She Said - Metal cover by Leo Moracchioli

USB adapter for RCD-Programmer

  이번 글은 기존에 자작하여 사용하고 있는 RCD-Programmer에 CY7C68013A USB 어댑터를 부착하여 기본 동작을 확인한 결과에 대한 내용이다. 일반적인 USB PIC 프로그래머들은 VPP 생성을 위해 부스트 컨버터를 내장 하고 있으나 RCD-Programmer는 RS-232 출력단의 전압을 Charge-pump로 승압시켜 사용 하는 구조이다. RCD-Programmer를 재사용 하므로 별도 부스트 컨버터는 필요치 않다. 다만 RS-232 신호 레벨 생성을 위한 트랜시버가 필요 하다. 프로그래밍용 어플리케이션과 USB 프로토콜은 usbpicprog라고 하는 프로젝트를 응용하였다.
  In this article, I introduce my initial test result about USB adapter for RCD-Programmer. General USB based PIC programmer has a DC/DC boost converter to make VPP voltage but the RS-232 based RCD-Programmer uses RS-232 signals to charge-pump VPP voltage and programming ICSP protocol by bit-banging. This test was started with hope to re-use my RCD-Programmer in USB. I adapted usbpicprog project for PIC programming PC application and USB protocol.

==========================================================================

 +------------+       +-----------+       +--------+        +---------+
 | usbpicprog +-------+ CY7C68013 +-------+ ADM213 +--------+ RCD-Pgm |
 +------------+  USB  +-----------+  TTL  +--------+ RS-232 +---------+
       |                    |                  |                 |
       PC              USB-adapter       Transceiver       PIC-Programmer
==========================================================================

[Fig. 1] My RCD-Programmer

[Fig. 2] BF810 USB to Serial

[Fig. 3] PCB Top Side

[Fig. 4] PCB Bottom Side

[Fig. 5] Modification

[Fig. 6] ADM213 Pinout for BF810 and CY7C68013


  RS-232 트랜시버 사용을 위해 BF810이라고 하는 USB to Serial 컨버터를 개조하여 사용 했다. [Fig. 2] 처럼 생긴놈을 분해하면 PL2303 USB 칩과 ADM213 RS-232 트랜시버 칩이 있는데 필요 없는 PL2303은 떼어 낸다. RCD-Programmer는 RS-232 신호중 TXD, DTR, RTS, CTS 신호선을 사용하므로 해당 신호선들을 찾아 CY7C68013의 PB[5:2] 포트와 연결한다. 펌웨어 개발은 일전에 공개한 debugbox 프로젝트에 포함 시켜 만들었다. AVRISP와 다르게 PIC 프로그래밍 프로토콜은 칩 모델마다 조금씩 다르게 구성 되어 있어 일반화된 프로그래밍 알고리즘 구현이 힘들다. 우선 'PIC12F629/675/PIC16F630/676 Memory Programming (DS41191D)' 메뉴얼의 프로그래밍 알고리즘을 구현하여 PIC16F676 디바이스로 테스트 해보았으며 [Fig. 8]와 같이 읽고 쓰기가 가능하였다.
  I used ADM213 RS-232 transceiver from BF810 USB to Serial converter. If you disassemble the BF810, you can see PL2303 and ADM213 chip on board. Remove PL2303 and connect to PB[5:2] port of CY7C68013A. In contrast to AVRISP, PIC programming algorithms are different from device to device. My initial implementation is for 'PIC12F629/675/PIC16F630/676 Memory Programming Manual (DS41191D)' and I could successfully read and write PIC16F676 device. Initial test code was developed with my debugbox project.

[Fig. 7] Integration

[Fig. 8] PIC16F676 R/W Test Result

[] Downloads
  - Pre-built firmware: Download
  - Source code: Download
  - just copy to debugbox project source directory and use it

debugbox

  debugbox는 개인 취미로 시작한 프로젝트로써 JTAG, SWD, AVR-ISP등 임베디드 시스템 개발시 필요한 USB 기반의 디버그 어댑터들의 모음이다. CY7C68013A USB 클라이언트 칩셋을 기반으로하는 단일 하드웨어에 아래 기능들을 모아 구현 하였다. 인터넷 어디선가 구할 수 있는 자료들을 기반으로 하였으며 소스가 있으면 해당 소스를 참고하여 포팅하고, 그렇지 못하면 관련 문서와 각종 포럼의 자료를 기반으로 그 기능을 모사 (emulation)하여 구현 하였다. 누군지도 모르는 웹 어디선가 자신의 삽질들을 공유 해준 덕분에 만들어 질 수 있었다. 내 삽질 또한 어느 누군가의 도움이 되길 바라며, 그간 진행해온 결과물을 소스 코드와 함께 공유한다. 좀더 나은 새로운 무언가가 만들어져 다시 또 내가 다른 형태의 도움을 받을 수 있는 선순환을 기대한다. (서두가 좀 거창한가?...)
  본 프로젝트에서는 사용자용 어플리케이션 소프트웨어를 새로 만들지 않는다. OpenOCD, avrdude등 기존에 잘 만들어져 사용되는 응용프로그램을 가능한 그대로 사용한다.

  소스코드와 미리 빌드된 펌웨어 다운로드 링크는 이 글 맨 아래쪽을 참고하면 된다.
  일반적인 JTAG 에뮬레이터의 TDI는 출력이고, TDO는 입력인데 타겟보드의 TDI는 이름 그대로 입력, TDO는 출력이다. JTAG 연합에서 왜 이렇게 만들었는지 모르겠으나 혼돈 스럽다. debugbox 프로젝트에서는 일반적인 JTAG 에듈레이터와 다르게 TDI는 모두 입력, TDO는 모두 출력으로 통일 시켰다.
  debugbox is my private project that is integration of useful USB based debug adapters such as JTAG, SWD, AVR-ISP and etcs with CY7C68013A USB client chip. My contribution is porting/migration/emulation and integration of USB debug bridge's firmware for CY7C68013A. In case of open-source based USB adapters, firmware is ported/migrated to CY7C68013A, if not, debug bridge functionalities are emulated through googled formal/informal documents and forum texts from World-Wide-Web with my trial and error. I'm sharing my debugbox project source code for hope to help someone who need it. 
Refer to download link at the end of this article.
  In general, target TDI is input and TDO is output but in JTAG emulator hardware, this naming is reversed. I have no idea why the JTAG assosiation defined such a confused naming. In my debugbox project, JTAG-TDI is input and JTAG-TDO is output.

[] debugbox features
  - USB-Blaster 1 (USB to JTAG)
    * UI Application: OpenOCD-JTAG (http://openocd.org)
    * Firmware: usb_blaster.ihx
  - USB-Blaster 2 (USB to JTAG)
    * UI Application: OpenOCD-JTAG (http://openocd.org)
    * Firmware: usb_blaster2.ihx
  - Versaloon-Link (USB to SWD)
    * UI Application: OpenOCD-SWD (http://openocd.org)
    * Firmware: vslswd.ihx
  - STK500 (USB AVRISP)
    * UI Application: avrdude (http://www.nongnu.org/avrdude)
    * Firmware: stk500.ihx
  - CP2112 (USB to SMBus/IIC)
    * UI Application: BE2Works (http://be2works.com)
    * Firmware: cp2112.ihx
  - JTAGIDER (JTAG pin identifier)
    * Firmware: jtagider.ihx



[Fig. 1] CY7C68013A Kit

[] Hardware
  앞서 이야기 한 것과 같이 USB 연동용 하드웨어는 CY7C68013A를 사용한다. [Fig. 1]와 같이 시중에 판매되는 CY7C68013A용 킷을 사다 사용해도 되고 나 처럼 CY7C68013A칩셋을 기반으로 하는 제품을 개조하여 사용 해도 된다. [Fig. 2]이 개조에 사용한 제품이며, Nvidia의 3D 비전용 적외선 방출장치를 개조하여 사용 하였다. VID/PID 저장용 IIC EEPROM은 제거 한다. PB[5:0]과 SMBus/IIC 통신을 위해 SCL/SDA를 인출 한다. 추가로 GND, 3.3V, 5V를 외부로 빼내어 하드웨어를 구성하면 된다. 개발을 위한 디버그 메시지가 필요하다면 UART 선도 외부로 인출하여 사용 한다.
  As I mentioned above, CY7C68013A is mandatory but IIC EEPROM (for VID/PID) is not needed. You may choose cheap CY7C68013A kit on the market for this project [Fig. 1]. In my case, I modified the commercial product IR emitter of 3D Vision which is CY7C68013A based small form factor housing from Nvidia [Fig. 2]. [Fig. 3] to [Fig. 6] are showing my modification. P1 is for probe pins and P2 is for 5V power output.

[Fig. 2] Nvidia IR Emitter for 3D Vision

[Fig. 3] PCB Top Side

[Fig. 4] PCB Bottom Side

[Fig. 5] Modification

[Fig. 6] Modification

[Fig. 7] Pull out PB[5:0], IIC and UART

[] P1 header pinout
  -------------------------------
   SDA  SCL  GND  RX0  TX0  3.3V
   PB0  PB1  PB2  PB3  PB4  PB5
  -------------------------------

[] Probe pin usage
  -------------------------------------------------------
   [PORT]  [JTAG]  [SWD]  [AVRISP]  [CP2112]  [JTAGIDER]
    PB5     TMS    SWDIO   -         -         Probe5
    PB4     TCK    SWCLK   SCK       -         Probe4
    PB3     TDO    -       MOSI      -         Probe3
    PB2     TDI    -       MISO      -         Probe2
    PB1     TRS    -       -         -         Probe1
    PB0     SRS    SRS     SRS       -         -
    SCL     -      -       -         SCL       -
    SDA     -      -       -         SDA       -
  -------------------------------------------------------

[] USB to SWD (Versaloon-Link)
  fxload를 이용해 'vslswd.ihx' 펌웨어를 CY7C68013A에 다운로드 하여 사용하면된다. 실제 Versaloon-Link 하드웨어는 출력 endpoint 주소로 0x03을 사용하여 구현되어 있다. 그러나 CY7C68013A 디바이스로 0x03 EP-OUT 구성이 불가능하여 'vslswd.ihx'펌웨어는 출력 endpoint로 0x04 주소를 사용해 구현 하였다. 때문에 OpenOCD의 소스 수정후 빌드하여 사용 해야 한다.
  CY7C68013A에 적재 가능한 코드 크기가 16KB로 제한되어 있어 모든 기능은 구현되지 않았으며 SWD 통신을 수행하는데 필요한 최소한의 기능만 구현되어 있다.
  Use 'vslswd.ihx' firmware for this function with fxload utility. The real Versaloon-Link's output endpoint address is 0x03, but 0x03 address is not applicable in CY7C68013A. Since I implemented output endpoint address as 0x04 instead 0x03 in 'vslswd.ihx', you should rebuild OpenOCD with modified address.
  Only SWD functions are implemented because of 16KB code memory limitation of CY7C68013A.

Edit OpenOCD source from
  ---------------------------------------------------------
   openocd/src/jtag/drivers/versaloon/versaloon_internal.h
   #define VERSALOON_OUTP 0x03
  ---------------------------------------------------------
to
  ---------------------------------------------------------
   openocd/src/jtag/drivers/versaloon/versaloon_internal.h
   #define VERSALOON_OUTP 0x04
  ---------------------------------------------------------



[Fig. 8] STM32F031 (from Syma 8X Drone) SWD Debugging

[] USB to JTAG (USB-Blaster 1/2)
  'usb_blaster.ihx' 혹은 'usb_blaster2.ihx' 펌웨어를 사용하여 OpenOCD와 연동하면 된다.
  Use 'usb_blaster.ihx' or 'usb_blaster2.ihx' with OpenOCD.


[Fig. 9] S5P6443 (from Car Navigation) JTAG Debugging

[] AVR-ISP (STK500)
  'stk500.ihx' 펌웨어와 avrdude를 사용하면 된다.
  Use 'stk500.ihx' firmware and avrdude.

[] USB to SMBus/IIC (CP2112)
  Silicon Labs의 CP2112라고 하는 'USB to SMBus/IIC' 컨버터를 모사한 기능으로 BE2Works 랩톱 배터리 모니터링 응용프로그램과 연동을 위해 만들었다. 'cp2112.ihx' 펌웨어를 사용하면 된다.
  This function is emulation of CP2112 USB to SMBus/IIC adapter from the Silicon Labs. You can communicate laptop battery with 'cp2112.ihx' firmware and BE2Works. I tested with demo version of BE2Works but the licensed version supports laptop battery reset, so you can replace battery cell by resetting error status and cycle count.

[Fig. 10] BE2Works

[Fig. 10] Laptop Battery Monitoring

[] JTAG Pin Identifier
  이 기능은 임베디드 보드의 JTAG 핀 배열을 모를때 TMS, TCK, TDO, TDI, TRS 핀의 위치를 자동으로 찾아주는 기능이다. 'jtagider.ihx'를 사용하면 되고 PC에서는 VCP (Virtual COM Port)로 인식된다. 해당 포트를 Teraterm과 같은 터미널로 연결하여 명령어를 입력하는 방식이다. [Fig. 11]은 [Fig. 9]의 메인보드상 S5P6443의 JTAG 핀 배열을 찾아낸 결과를 보여주고 있다. 보통 JTAG-TAP들은 Daisy-Chain 방식으로 연결 되어 있어 연결 방식을 감안하여 숫자를 입력 한다. S5P6443의 경우 ETM과 ARM 2개의 JTAG-TAP이 연동 되어 있으며 각 IR의 길이는 4-bit와 5-bit이다. 명령 입력은 '[pre-dcnt] [pre-irlen] [inst-len] [post-dcnt] [post-irlen]' 순서로 숫자만 입력한다. '0 0 4 1 5' 명령으로 ETM-TAP의 ID인 '0x2B900F0F'가 확인 되었으며 이때 핀 배열은 'RIOCM (Probe1~5:TRS/TDI/TDO/TCK/TMS)'로 확인 된다. '1 4 5 0 0' 명령으로 ARM11-TAP의 ID인 '0x07B76F0F'가 확인이 되고 핀 배열은 동일한 'RIOCM (
Probe1~5:TRS/TDI/TDO/TCK/TMS)'로 확인 되었다.
  You can use this function to identify JTAG pin order for unknown target board. Download firmware 'jtagider.ihx' and you may found a new VCP (Virtual COM Port) on your PC after download it to CY7C68013. Connect to that COM port with terminal emulator such as Teraterm and you can see prompt 'JID'. [Fig. 11] is my example result of [Fig. 9] S5P6443 based car navigation board. That board has JTAG port but the pin order is unknown. In the S5P6443 reference manual, there are daisy-chained 2 JTAG-TAPs, ETM and ARM11. Command order is '[pre-dcnt] [pre-irlen] [inst-len] [post-dcnt] [post-irlen]'. I could identify JTAG pin order 'RIOCM (Probe1~5:TRS/TDI/TDO/TCK/TMS)' by command '0 0 4 1 5' with detected ETM-TAP ID '0x2B900F0F'. Command '1 4 5 0 0' shows same JTAG pin order 'RIOCM (Probe1~5:TRS/TDI/TDO/TCK/TMS)' with detected ARM11-TAP ID '0x07B76F0F'.


  ----------------------------------------------
                 ETM-TAP       ARM11-TAP
                +--------+    +--------+
   JTAG_TDO ----+TDI  TDO+----+TDI  TDO+---+
                +--------+    +--------+   |
                 IR-4bit       IR-5bit     |
                                           |
   JTAG_TDI -------------------------------+

            [S5P6443 JTAG-TAP Chain]
  ----------------------------------------------

  * pre-dcnt  : Total device count of front side daisy-chain
  * pre-irlen : Total IR bit-length of front side daisy-chain
  * inst-len  : IR length to check ID
  * post-dcnt : Total device count of end side daisy-chain
  * post-irlen: Total IR bit-length of end side daisy-chain

[Fig. 11] S5P6443 Car Navigation Board JTAG Pin Identification

  CY7C68013의 아주 유용한 기능중 하나가 로직어날라저로 사용이 가능한데 sigrok (https://sigrok.org)을 사용하면 무려 16채널 24MHz 로직 어날라이저로도 사용 가능하다.
  Another very useful function is logic analyzer, you can check the sigrok (https://sigrok.org) to use the CY7C68013 as 16-Ch. 24MHz logic analyzer.

[] Downloads
  - Pre-built firmware: Download
  - Source code
: Download
  - Compiler used: sdcc-3.9.0

  소스는 개인적인 목적이라면 자유롭게 사용/수정/재배포 가능하며, 상업적 이용은 금지합니다.
  You can freely use/modify/republish my source code for private purpose, but DO NOT USE for commercial product.