둘러보기
"Billmock"은 주로 대한민국의 오락실 기계에서 사용되며, 화폐 지불 입력 신호를 특정 조건에 따라 조작하기 위해 개발된 시스템입니다. 이 시스템은 주로 카드 단말기를 설치하거나 신호 대기열에 따른 순차 작업과 같이 다양한 조건에 기반한 프로그래밍 작업이 필요한 경우에 사용됩니다.
현장에서 원하는 설정으로 쓰기위해 미리 설정된 I/O 리매핑을 DIP-Switch로 설정할 수 있으며, wire-map상으로는 HOST GAME PCB 와 지폐기기 사이에 설치가 됩니다.
하드웨어
최종 양산으로 채택하고 있는 Hardware revision은 0.5-MINI 이며, 프로그램 개발또한 해당 버젼에 맡게 진행 되고 있습니다.
이전에 개발된 하드웨어로는 0.2, 0.3, 0.4, 0.4-Mini 총 4가지의 Hardware revision이 있으며 이전 버젼중 추가로 사용 가능한 것은 0.4 와 0.4 Mini이 사용가능 합니다. (일부 SVC관련된 기능을 사용할 수 없음)
핀맵이나 설치를 확인하기 위해서는 좌측의 목차에서 원하는 항목을 확인하십시오.
For Developer
이 프로젝트는 일부 NDA 영역과 양산에 필요한 데이터를 제외하고는 오픈소스 공개를 전제로 하고 개발됬습니다.
개발에 관련된 부분은 개발자 매뉴얼 를 참고해주십시오.
라이센스
이 프로그램과 관련 자료는 Apache Software License 2.0의 조건에 따라 사용할 수 있으며, 이 조건은 Apache Software License 2.0에서 확인할 수 있습니다. 또한, MIT 라이선스에 따라 사용할 수도 있으며, 이 조건은 MIT License에서 확인할 수 있습니다.
또한, 모든 코드는 MIT 또는 Apache Software License 2.0에 기반하고 있습니다. 그러나 일부 공통적인 *.toml 파일은 CC0-1.0 라이선스를 기반으로 하고 있습니다.
다만 공장 출하되는 펌웨어는 일부 NDA코드가 포함되어 있으며, 이 경우에는 위에서 언급한 라이센스의 영향을 받지않는 비공개 소프트웨어 라이센스를 기반으로 하고있습니다.
공개된 범위의 회로도(PDF)는 CC-BY-SA 3.0으로 배포가되며, 변형되거나 참고시 저작자표시 및 동일조건으로만 배포 가능합니다.
DIP Switch
Overview
SW # | SW Name | 설명 |
---|---|---|
1 | INHIBIT0 | Inhibit Override(입수금지 강제 설정) - Player 1 |
2 | INHIBIT1 | Inhibit Override(입수금지 강제 설정) - Player 2 |
3 | TIMING0 | Timing Override(펄스폭 강제 설정) (50 ms Std) |
4 | TIMING1 | Timing Override(펄스폭 강제 설정) (100 ms Std) |
5 | MODE0 | Application mode(실행 모드) |
6 | MODE1 | Application mode(실행 모드) |
입수금지 강제 설정 - Inhibit override
Inhibit0 (1 ) | Inhibit1P (2 ) | 설정 |
---|---|---|
0 | 0 | 일반 (강제 입수금지 없음) |
1 | 0 | 1P에 대한 강제 입수금지 설정 |
0 | 1 | 2P에 대한 강제 입수금지 설정 |
1 | 1 | 전체적인 강제 비활성화 설정 |
- 딥 스위치 설정에 따라 각 플레이어에 대한 강제 입수금지하여 게임 I/O 신호와 관계없이 입수금지 상태로 설정됩니다.
- 딥 스위치 설정에서 강제 입수금지가 없더라도 호스트 게임 I/O 측에서 비활성화가 활성화된 경우 각 플레이어에 대한 입수금지가 활성화됩니다.
- 이 Inhibit DIP 스위치 설정은 현장 엔지니어가 유지 보수 중인 장치의 입수금지하는 데 사용할 수 있습니다.
신호 폭 강제 설정 - Timing override
TIMING0 (3 ) | TIMING1 (4 ) | 구성 |
---|---|---|
0 | 0 | 자동 |
1 | 0 | 50mS Active Low 강제 설정 |
0 | 1 | 100mS Active Low 강제 설정 |
1 | 1 | 200mS Active Low 강제 설정 |
-
타이밍 SW
00
(자동), Active Low 출력 신호용, 시리얼 통신에서 제공하는 펄스 지속 시간 또는 병렬 통신(기존 동전 및 지폐 수용기)의 펄스 지속 시간 측정값을 을 신호 소스에 따라 별도로 설정합니다. 둘 다 사용할 수 없는 경우 기본값(100mS)이 사용됩니다. -
타이밍 SW
01
,10
,11
은 모든 신호 소스의 펄스 지속 시간을 무시하고 50mS, 100mS, 200mS 중 하나로 고정하여 출력합니다.
실행모드 - Application mode
MODE0 (5 ) | MODE1 (6 ) | 스왑 상태 | 특수 기능 |
---|---|---|---|
0 | 0 | 스타트 신호 | 아니오, 스타트 신호는 호스트(게임 PCB) 측 출력으로 바이패스됨 |
1 | 0 | 스타트 신호 | 예, 스타트 신호는 시리얼 통신을 통한 결제 수입의 방향을 결정합니다 |
0 | 1 | JAM 신호 | 아니오, JAM 신호는 JAM(게임 PCB) 측 출력으로 바이패스됨 |
1 | 1 | 사용 불가 | ROM 내용 표시, 이외 동작 정지 |
-
MODE0 (5) : 특수 기능을 비활성화하거나 활성화합니다.
-
MODE1 (6) : Vend 쪽에서
start
와jam
입력 신호를 스왑합니다. 기본 정의는 스타트입니다. -
00
: BypassStart일반 모드로 시작을 바이패스합니다 (기본 값). 스타트 신호는 호스트(게임 PCB) 측 출력으로 바이패스됩니다.
-
01
: StartButtonDecideSerialToVend스타트 버튼을 모방하는 특수 모드입니다. 스타트 신호는 시리얼 통신을 통한 결제 수입의 방향을 결정합니다.
-
10
: BypassJamJAM을 바이패스하는 일반 모드 (논리적으로 스왑). JAM 신호는 호스트(게임 PCB) 측 출력으로 바이패스됩니다.
-
11
: DisplayRom- BillMock의 펌웨어 정보와 카드 단말기 TID, 누계된 카드, 지폐(동전) 계수를 표시하며 코인미터기를 대신해서 쓸 수 있습니다.
- 이 모드에서 빠져나오는 경우, DisplayHwInfo를 통해 하드웨어 정보가 표시됩니다.
- SVC버턴은 10초이상 누르면 Counter Reset 기능을 통해 계수가 0으로 초기화 됩니다.
- 연결된 카드단말기의 TID가 변경되면, 누계 카드 계수는 0으로 초기화 됩니다. 자세한 정보는 DisplayRom 상세 정보 를 참고해주십시오.
프로그램 로직
간략화된 프로그램 및 시그널 입출력 플로우는 아래와 같습니다.
대략적인 동작 개요
화폐지불장치(카드 승인기, 코인기, 지폐기 등)을 GAME I/O PCB 에 연결하기 전에 입출력 신호를 기억, 변조, 지연 등을 하여 지불시스템을 개선하는 장치입니다.
DIP Switch 설정과 적절한 배선 변경을 통하여 원하는 화폐지불장치와 GAME I/O PCB 간의 설정을 유도할 수 있습니다.
이 장치를 통해서 이와 같은 설정을 할 수 있습니다.
- 기존 게임기에 카드 승인기 설치
- 기존 게임기에 카드 승인기 와 지폐기(코인기) 를 동시에 1P에 사용
- 기존 게임기에 1대의 카드 승인기 와 1대의 지폐기(코인기)로 스타트버턴 입력시, 1P/2P 관리
- 기존 게임기에 1대의 지폐기(코인기)로 스타트 버턴 입력시, 1P/2P 관리
- 입력신호 너비 강제 조정
- 코인미터기 대신 누계 카드/지폐(동전) 정보 표시 DisplayRom 상세 정보
- 사용자의 코드수정을 통한 더욱 복잡한 입출력 신호 변조
DisplayRom
-
통상 운용중에 위와 같은 정보를 보기위해서는 DIP SWITCH상에서 DIP-SWITCH 실행모드를 확인하여 설정해주십시오.
-
정보는 10초동안 뜨며, 4줄에 나눠서 ROM과 프로그램에 대한 내용이 게시된다.
-
1줄 :
{Git Hash} {TID}
- Git Hash : BillMock 펌웨어 프로그램 billmock-app-rs 의 shorten git commit hash입니다.
- TID : 카드 단말기의 고유번호입니다. PG사에 단말기 연결을 할때 카드단말기에서 설정이 되는 값이며, PG사의 전산에서도 확인이 가능한 고유번호입니다.
-
2줄 :
카드 : {1P Count} + {2P Count} = {Credit Sum}
- 1P Count : 카드단말기에 사전에 설정된 클럭 수와 소비자가 결제한 내역을 바탕으로 누계된 플레이어 1에 대한 클럭 수
- 2P Count : 카드단말기에 사전에 설정된 클럭 수와 소비자가 결제한 내역을 바탕으로 누계된 플레이어 2에 대한 클럭 수
- Credit Sum : 카드 단말기로 결제된 1P Count와 2P Count 값의 합계
-
3줄 :
지폐 : {1P Count} + {2P Count} = {Coin Sum}
- 1P Count : 지폐기 혹은 코인기 클럭 수와 소비자가 지불한 내역을 바탕으로 누계된 플레이어 1에 대한 클럭 수
- 2P Count : 지폐기 혹은 코인기 클럭 수와 소비자가 지불한 내역을 바탕으로 누계된 플레이어 2에 대한 클럭 수
- Coin Sum : 지폐기 혹은 코인기로 지불된 1P Count와 2P Count 값의 합계
-
4줄 :
1P : {1P Sum Count}, {2P Sum Count}
- 1P Sum Count : 카드단말기 와 지폐기(혹은 코인기)로 누계된 플레이어 1에 대해 합산된 클럭 수2번째와 3번째 줄의 1P Count 의 합계
- 2P Sum Count : 카드단말기 와 지폐기(혹은 코인기)로 누계된 플레이어 2에 대해 합산된 클럭 수2번째와 3번째 줄의 2P Count 의 합계
-
-
모든 카운트 숫자는 6자리 (0 ~ 999,999) 까지 표시된다. 1,000,000이 넘어가면 0이 아닌 000,000으로 표시되며 그다음 1,000,001은 000,001 로 표시된다.
-
해당 기능은
0.2.0
펌웨어, 하드웨어0.4
혹은Mini 0.4
이상부터 사용할 수 있으며, 전에 있는 하드웨어 에서는 사용할 수 없습니다. -
하드웨어
0.5
혹은Mini 0.5
이상부터는 SVC버턴을 짧게 누름으로서 사용할수 있습니다.
DisplayHwInfo
-
통상 운용중에 위와 같은 정보를 보기위해서는 DIP SWITCH상에서 DIP-SWITCH 실행모드를 확인하여 설정해주십시오.
-
정보는 10초동안 뜨며, 4줄에 나눠서 ROM과 프로그램에 대한 내용이 게시된다.
-
1줄 :
{Boot Cnt} 버젼:{x.y.z}
- Boot Cnt : BillMock 하드웨어의 부팅 횟수 입니다. 기기가 꺼졌다가 다시 켜질떄마다 1씩 올라갑니다.
- x.y.z : BillMock 펌웨어 프로그램 billmock-app-rs 의 펌웨어 버젼입니다.
-
2줄 :
S/N : {Serial Number}
- Serial Number : BillMock 하드웨어의 고유 시리얼 넘버입니다. 양산 출하시 부여됩니다.
-
3줄 :
TID : {TID}
- TID : 카드 단말기의 고유번호입니다. PG사에 단말기 연결을 할때 카드단말기에서 설정이 되는 값이며, PG사의 전산에서도 확인이 가능한 고유번호입니다.
-
4줄 :
사용시간 : {Uptime} 분
- Uptime : BillMock 하드웨어가 켜진시간을 나타냅니다. 분단위로 표시가 됩니다.
-
-
해당 기능은
0.2.1
펌웨어, 하드웨어0.4
혹은Mini 0.4
이상부터 사용할 수 있으며, 전에 있는 하드웨어 에서는 사용할 수 없습니다. -
하드웨어
0.5
혹은Mini 0.5
이상의 하드웨어에 있는 SVC버턴을 2초 정도 누름으로서 사용할수 있습니다. -
하드웨어
0.4
혹은Mini 0.4
이상의 하드웨어에서 DIP 스위치를 통해 DispRom 를 빠져나올 때도 표시가 됩니다.
Counter Reset
-
경고문은 10초 동안 뜨며, 경고문이 뜬 시점에 이미 ROM내용은 초기화 됩니다.
-
DispRom 에서 표시되는
P1 Card
,P2 Card
,P1 Coin
,P2 Coin
의 카운트가 0으로 초기화 되며 부팅횟수, 사용시간 등의 정보는 초기화 되지 않습니다. -
해당 기능은
0.3.1
펌웨어, 하드웨어0.5
혹은Mini 0.5
이상의 하드웨어에 있는 SVC버턴을 10초 이상 눌러야 사용할수 있습니다.
기기 설치
실제 오락실 기기에 연결할때 두가지 형태로 설치할 수 있습니다.
각자 장단점이 있으니 둘 다 테스트 후 적합한 방법을 선택해주세요.
전용 단자 제작
- 핀 아웃 목차(포트 설명) 에서 사용할 하네스를 마련합니다.
- 연결합니다.
기존 하네스에 터미널 단자 사용
- 선길이가 어느정도 여유가 있다는 가정하에, 본 제품을 설치할 지점에서 선을 자릅니다.
- 자른 선의 양쪽에 1cm (10 mm) 정도 도선이 보이는 상태로 피복을 벗깁니다.
- 상/하단의 터미널에 주황색 걸쇠를 누른채로 구멍에 아까 벗긴 도선을 튼튼하게 넣어줍니다.
- ※ 대체로 상단에 실제 화폐지불장치로 가는 배선이 연결되어야 하며, 하단쪽에는 GAME I/O PCB쪽으로 나가는 배선이 연결 됩니다.
- ※ 기존 배선을 활용하는 것이기에 길이 여유가 어느정도 있어야합니다.
- ※ 기존 배선은 UL/CUL 규격 기준 AWG20 이상, AWG26 이하의 배선만 해당 터미널에 사용 가능합니다.
하드웨어 차이점 설명
Mini 버젼 | 일반 버젼 |
---|---|
BillMock 하드웨어는 두가지 종류가 있습니다. 직사각형 모양을 한 작은 BillMock Mini (직사각형)과 위아래로 터미널과 DC잭이 있는 정사각형 모양의 BillMock (정사각형) 이 있습니다.
Mini는 일반버젼에서 터미널과 DC잭, 추가 RS232포트를 제거했습니다. 가격이 더 저렴하며, 이미 하네스가 준비된 상태라면 좀 더 수월하게 설치할 수 있으며, 하네스를 구성하기에 매우 복잡하고 현장에서 터미널에 직접 연결을 하는 편이 나은 상황에선 일반버젼이 적합 할 수 있습니다.
하지만 현장에서는 터미널로 매번 구성하는 것 보다 준비된 하네스로 설치를 마치는 것이 효율성이 좋으므로 Mini버젼을 권장 합니다.
목차
BillMock Mini
앞면 사진 | 뒷면 사진 |
---|---|
핀아웃 둘러보기
중간 우측에는 카드단말기와 연결할수 있는 4핀 커넥터가 있습니다.
상단에는 Vend Side(진권에 관련된 지폐기, 동전기 등) 커넥터가 배치되어 있으며,
하단에는 Host Side(GAME I/O PCB 와 같은 실제 오락기기 메인보드 인터페이스) 커넥터가 배치되어 있습니다.
좌측과 우측에 데칼코마니 패턴으로 같은 커넥터들이 배치되어있으며, 좌측은 Player 1, 우측은 Player 2를 위한 커넥터가 배치되어 있습니다.
이러한 패턴으로 전반적인 커넥터 구성이 되어있으므로, 실제 설치나 운용시에 참고한다면 쉽게 커넥터에 와이어를 연결할 수 있습니다.
개념적으로 본다면 기존 배선에서는 위에서 아래로 연결된 커넥터가 각각 끊어지고 위쪽의 커넥터와 아래쪽의 커넥터에 연결되고, 그 사이를 하드웨어와 소프트웨어가 관리하는 형태로 동작하며, 이러한 연결을 설계시에 의도 했습니다.
BillMock Mini의 대략적인 연결
※ 선의 모양은 임의의 선을 표시하기위한 표식이며, 이미지 상으로 보이는 선색깔로 연결이 되지는 않습니다. 자세한 핀맵은 세부 페이지를 확인 해주세요.
기존에 상단의 지폐기(혹은 코인기) 와 하단의 GAME I/O PCB와의 하네스 연결 사이에 이 PCB (BillMock Mini) 를 설치하는 형태입니다.
경우에 따라서는 추가적인 배선작업이 필요할 수 있습니다만, 국내에서 널리 사용하는 지폐기 배선을 그대로 이용하기에 이를 고려하여 하네스를 준비해 연결하면 됩니다.
제품 사양
Product name | BillMock |
Manufacturer | GPARK Co., Ltd. |
Country | South Korea |
Dimension | 75.0 mm * 45.0 mm |
MCU | STM32G030C8 |
MCU Spec | ARM Cortex-M0+ 64Mhz CPU, 8KiB SRAM, 64KiB Flash |
Software | Embassy-rs written in rust |
Power Input | 12V 2A |
Pouwer Output | 5V (Peak 2.2A 300mS trip, 1.1A nominal MAX) - Credit card reader power |
※ 입력전원은 16V까지 사용이 가능하나 지폐기쪽 전원과 그대로 반영이 되므로, 주의가 필요
Vend side port map
Vend Side Player 1 Port (좌측)
Designator | J4 |
Player 1 - 실존하는 코인기 / 지폐기 포트 | |
Connector | Molex 53014-10xx |
Housing | Molex 51004-10xx |
Crimp | Molex 50011 |
Pin # | Pin Name | 설명 |
---|---|---|
1 | N/C | |
2 | VEND | 코인기/지폐기 진권 입력 신호 |
3 | N/C | |
4 | START | 스타트 버튼 입력 신호 |
5 | INHIBIT | 코인기/지폐기 입수금지(비활성화) 출력 신호 |
6 | GND | 코인기/지폐기 -극 전원 입력/출력. 제품 -극 전원 |
7 | N/C | |
8 | 12V | 코인기/지폐기 +극 전원 입력/출력, 제품 +극 전원 |
9 | 12V | 코인기/지폐기 +극 전원 입력/출력, 제품 +극 전원 |
10 | GND | 코인기/지폐기 -극 전원 입력/출력. 제품 -극 전원 |
- Pin# 왼쪽 부터 카운트함
12V
,GND
로 BillMock-HW 자체의 전원을 입력받을 수 도 있습니다.
Vend Side Player 2 Port 우측
Designator | J5 |
Player 2 - 실존하는 코인기 / 지폐기 포트 | |
Connector | Molex 53014-10xx |
Housing | Molex 51004-10xx |
Crimp | Molex 50011 |
Pin # | Pin Name | 설명 |
---|---|---|
1 | N/C | |
2 | VEND | 코인기/지폐기 진권 입력 신호 |
3 | N/C | |
4 | START | 스타트 버튼 입력 신호 |
5 | INHIBIT | 코인기/지폐기 입수금지(비활성화) 출력 신호 |
6 | GND | 코인기/지폐기 -극 전원 입력/출력. 제품 -극 전원 |
7 | N/C | |
8 | 12V | 코인기/지폐기 +극 전원 입력/출력, 제품 +극 전원 |
9 | 12V | 코인기/지폐기 +극 전원 입력/출력, 제품 +극 전원 |
10 | GND | 코인기/지폐기 -극 전원 입력/출력. 제품 -극 전원 |
- Pin# 왼쪽 부터 카운트함
12V
,GND
로 BillMock-HW 자체의 전원을 입력받을 수 도 있습니다.
Host side 핀 아웃
Host Side Player 1 Port (좌측)
Designator | J3 |
가상 1P 코인기/지폐기/스타트 포트 | |
Connector | 141R-2.54-8P |
Pin # | Pin Name | 설명 |
---|---|---|
1 | V1-BUSY | 가상1P 코인기/지폐기 BUSY신호 에뮬레이션 출력 |
2 | V1-VEND | 가상1P 코인기/지폐기 진권신호 에뮬레이션 출력 신호 |
3 | V1-JAM | 가상1P 코인기/지폐기 종이걸림/고장 에뮬레이션 입력 신호 |
4 | V1-START | 가상1P 스타트 버튼쪽 스위치 에뮬레이션 출력 신호 |
5 | V1-INHIBIT | 가상1P 코인기/지폐기 입수금지 에뮬레이션 입력 신호 |
6 | N/C | |
7 | N/C | |
8 | 12V | +극 전원 입력/출력, 제품 +극 전원 (12V 권장) |
9 | 12V | +극 전원 입력/출력, 제품 +극 전원 (12V 권장) |
10 | GND | -극 전원 입력/출력. 제품 -극 전원 |
- Pin# 오른쪽 부터 카운트함
12V
,GND
로 BillMock-HW 자체의 전원을 입력받을 수 도 있습니다.- 이 포트에서 나오는 전원 핀은 전원 출력용으로 사용 할 수 없습니다. 해당 포트로 들어오는 전원 입력이 차단 되는 경우, 역 전압이 흐르지 않습니다.
- Credit card의 payment 신호를 받거나 VEND 입력 신호가 Active Low로 들어온 시점부터 VEND 출력 신호가 Toggle 신호가 끝날 때 까지 Busy 출력신호를 Active Low로 출력합니다.
Host Side Player 2 Port 우측
Designator | J2 |
가상 2P 코인기/지폐기/스타트 포트 | |
Connector | 141R-2.54-8P |
Pin # | Pin Name | 설명 |
---|---|---|
1 | V1-BUSY | 가상2P 코인기/지폐기 BUSY신호 에뮬레이션 출력 |
2 | V1-VEND | 가상2P 코인기/지폐기 진권신호 에뮬레이션 출력 신호 |
3 | V1-JAM | 가상2P 코인기/지폐기 종이걸림/고장 에뮬레이션 입력 신호 |
4 | V1-START | 가상2P 스타트 버튼쪽 스위치 에뮬레이션 출력 신호 |
5 | V1-INHIBIT | 가상2P 코인기/지폐기 입수금지 에뮬레이션 입력 신호 |
6 | N/C | |
7 | N/C | |
8 | 12V | +극 전원 입력/출력, 제품 +극 전원 (12V 권장) |
9 | 12V | +극 전원 입력/출력, 제품 +극 전원 (12V 권장) |
10 | GND | -극 전원 입력/출력. 제품 -극 전원 |
- Pin# 오른쪽 부터 카운트함
12V
,GND
로 BillMock-HW 자체의 전원을 입력받을 수 도 있습니다.- 이 포트에서 나오는 전원 핀은 전원 출력용으로 사용 할 수 없습니다. 해당 포트로 들어오는 전원 입력이 차단 되는 경우, 역 전압이 흐르지 않습니다.
- Credit card의 payment 신호를 받거나 VEND 입력 신호가 Active Low로 들어온 시점부터 VEND 출력 신호가 Toggle 신호가 끝날 때 까지 Busy 출력신호를 Active Low로 출력합니다.
Port - ETC
Credit Card Reader Port
|
|
- 5V 출력, Peak 2.2A 300mS trip, 1.1A nominal MAX.
Program debugging (SWD/JTAG)
Role | STM32 SWD |
Connector | TC2030 |
- 디버그 인터페이스에 대해서는 이쪽에서 자세히 확인해주세요. BillMock-HW-RELEASE
BillMock
앞면 사진 | 뒷면 사진 |
---|---|
핀아웃 둘러보기
상단에는 Vend Side(진권에 관련된 지폐기, 동전기, 카드단말기 등) 커넥터가 배치되어 있으며,
하단에는 Host Side(GAME I/O PCB 와 같은 실제 오락기기 메인보드 인터페이스) 커넥터가 배치되어 있습니다.
좌측과 우측에 데칼코마니 패턴으로 같은 커넥터들이 배치되어있으며, 좌측은 Player 1, 우측은 Player 2를 위한 커넥터가 배치되어 있습니다.
이러한 패턴으로 전반적인 커넥터 구성이 되어있으므로, 실제 설치나 운용시에 참고한다면 쉽게 커넥터에 와이어를 연결할 수 있습니다.
개념적으로 본다면 기존 배선에서는 위에서 아래로 연결된 커넥터가 각각 끊어지고 위쪽의 커넥터와 아래쪽의 커넥터에 연결되고, 그 사이를 하드웨어와 소프트웨어가 관리하는 형태로 동작하며, 이러한 연결을 설계시에 의도 했습니다.
이 외에도 전원 공급을 위한 커넥터, 디버그용 추가 RS232 커넥터, 프로그램 디버깅용 SWD(JTAG) 커넥터가 있습니다.
BillMock 의 대략적인 연결
※ 선의 모양은 임의의 선을 표시하기위한 표식이며, 이미지 상으로 보이는 선색깔로 연결이 되지는 않습니다. 자세한 핀맵은 세부 페이지를 확인 해주세요.
기존에 상단의 지폐기(혹은 코인기) 와 하단의 GAME I/O PCB와의 하네스 연결 사이에 이 PCB (BillMock) 를 설치하는 형태입니다.
경우에 따라서는 추가적인 배선작업이 필요할 수 있습니다만, 국내에서 널리 사용하는 지폐기 배선을 그대로 이용하기에 이를 고려하여 하네스를 준비해 연결하면 됩니다.
BillMock Mini 버젼과 다르게 터미널로 배선 작업을 할 수도 있습니다. 자시한 사항은 기기 설치 문서를 확인하십시오.
또한 터미널 핀아웃은 일반 몰렉스 단자와 조금 다르므로, 상단과 하단 터미널에 대해서 이 문서를 확인해주십시오
제품 사양
Product name | BillMock |
Manufacturer | GPARK Co., Ltd. |
Country | South Korea |
Dimension | 65.0 mm * 65.0 mm |
MCU | STM32G030C8 |
MCU Spec | ARM Cortex-M0+ 64Mhz CPU, 8KiB SRAM, 64KiB Flash |
Software | Embassy-rs written in rust |
Power Input | 12V 2A |
Pouwer Output | 5V (Peak 2.2A 300mS trip, 1.1A nominal MAX) - Credit card reader power |
※ 입력전원은 16V까지 사용이 가능하나 지폐기쪽 전원과 그대로 반영이 되므로, 주의가 필요
Vend side port map
Vend Side Quick Terminal
|
- Pin# 왼쪽 부터 카운트함
12V
,GND
로 BillMock-HW 자체의 전원을 입력받을 수 도 있습니다.- 터미널 단자는 중간에 케이블을 끊어서 피복을 벋긴다음에 연결할 때에 용이하나,
- 가급적이면 케이블 타입을 구비하여 사용하는 것을 권장합니다.
- START1/2 는 DIP Switch설정에 따라 JAM으로 변경 가능합니다.
Vend Side Player 1 Port (좌측)
|
- Pin# 왼쪽 부터 카운트함
12V
,GND
로 BillMock-HW 자체의 전원을 입력받을 수 도 있습니다.
Vend Side Player 2 Port 우측
|
- Pin# 왼쪽 부터 카운트함
12V
,GND
로 BillMock-HW 자체의 전원을 입력받을 수 도 있습니다.
Host side 핀 아웃
Host Side Quick Terminal
|
- Pin# 왼쪽 부터 카운트함
12V
,GND
로 BillMock-HW 자체의 전원을 입력받을 수 도 있습니다.- 터미널 단자는 중간에 케이블을 끊어서 피복을 벋긴다음에 연결할 때에 용이하나,
- 가급적이면 케이블 타입을 구비하여 사용하는 것을 권장합니다.
Host Side Player 1 Port (좌측)
|
- Pin# 왼쪽 부터 카운트함
12V
,GND
로 BillMock-HW 자체의 전원을 입력받을 수 도 있습니다.- 이 포트에서 나오는 전원 핀은 전원 출력용으로 사용 할 수 없습니다. 해당 포트로 들어오는 전원 입력이 차단 되는 경우, 역 전압이 흐르지 않습니다.
- Credit card의 payment 신호를 받거나 VEND 입력 신호가 Active Low로 들어온 시점부터 VEND 출력 신호가 Toggle 신호가 끝날 때 까지 Busy 출력신호를 Active Low로 출력합니다.
Host Side Player 2 Port 우측
|
- Pin# 왼쪽 부터 카운트함
12V
,GND
로 BillMock-HW 자체의 전원을 입력받을 수 도 있습니다.- 이 포트에서 나오는 전원 핀은 전원 출력용으로 사용 할 수 없습니다. 해당 포트로 들어오는 전원 입력이 차단 되는 경우, 역 전압이 흐르지 않습니다.
- Credit card의 payment 신호를 받거나 VEND 입력 신호가 Active Low로 들어온 시점부터 VEND 출력 신호가 Toggle 신호가 끝날 때 까지 Busy 출력신호를 Active Low로 출력합니다.
Port - ETC
Credit Card Reader Port
|
- 5V 출력, Peak 2.2A 300mS trip, 1.1A nominal MAX.
DC Power Jack
|
- 12V 입력을 권장합니다. (최대 16V)
- 하단 DC 잭 이외에 하단 왼쪽(J5), 하단 오른쪽(J4)의 10핀 몰렉스 포트로 받는 것도 권장합니다.
- 상단 터미널 (J9)/ 상단 10핀 몰렉스(J7/J8)로 전원 입력을 하는 것은 비추천합니다.
Program debugging (SWD/JTAG)
|
- 디버그 인터페이스에 대해서는 이쪽에서 자세히 확인해주세요. BillMock-HW-RELEASE
개발자 매뉴얼
Write In Rust
Firmware software는 defacto로 쓰이던 C
언어가 아닌 Rust로 개발되었습니다. Rust를 신뢰해서 쓴 것도 있지만 Rust 로 mass production을 위한 embedded system에 적용이 가능 하다는 것을 검증하기위한 용도 또한 있습니다. 따라서 firmware source가 하나의 example-code 선례로서 남기를 바랍니다.
NDA코드를 제외한 SW code는 billmock-app-rs 에서 확인 가능합니다.
소프트웨어
실제 카드단말기 연결
양산으로 들어가는 펌웨어는 KICC사의 ED-785 단말기를 기준으로 하고 있습니다. 하지만 NDA 문서에 의거하여 해당 코드는 공개된 코드에 없으며 dependency injection 을 통해 따로 관리되고 있습니다. 따라서 공개된 소스코드에는 실제로 동작하지않는 예제 프로토콜 코드만 담고있습니다.
개발환경
※ 저자에게 MS Windows 환경이 없어, Linux, MacOS 기준으로 서술합니다.
apply USB (stlink-v2/3) permission rule to ignore root access
# refer https://calinradoni.github.io/pages/200616-non-root-access-usb.html
sudo tee /etc/udev/rules.d/70-st-link.rules > /dev/null <<'EOF'
# ST-LINK V2
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748", GROUP="plugdev", MODE="660", TAG+="uaccess", SYMLINK+="stlinkv2_%n"
# ST-LINK V2.1
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", GROUP="plugdev", MODE="660", TAG+="uaccess", SYMLINK+="stlinkv2-1_%n"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3752", GROUP="plugdev", MODE="660", TAG+="uaccess", SYMLINK+="stlinkv2-1_%n"
# ST-LINK V3
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374d", GROUP="plugdev", MODE="660", TAG+="uaccess", SYMLINK+="stlinkv3loader_%n"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374e", GROUP="plugdev", MODE="660", TAG+="uaccess", SYMLINK+="stlinkv3_%n"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374f", GROUP="plugdev", MODE="660", TAG+="uaccess", SYMLINK+="stlinkv3_%n"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3753", GROUP="plugdev", MODE="660", TAG+="uaccess", SYMLINK+="stlinkv3_%n"
EOF
apply rules and reboot linux
sudo usermod -a -G plugdev $USER
sudo udevadm control --reload-rules
sudo udevadm trigger
sudo reboot
Necessary apt package for rust embedded
# necessary for basic software development environment
sudo apt install curl git build-essential -y
# build.rs uses libgit2-sys to get commit hash
sudo apt install pkg-config libssl-dev -y
# for knurling-rs/probe-run
sudo apt install libusb-1.0-0-dev libudev-dev -y
# Install rustc/rustup/cargo for rust development environment
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Install probe-run for debug/flash firmware binary on target board.
cargo install probe-run
# Install cargo-binutils for analyze mem/flash usage.
cargo install cargo-binutils
rustup component add llvm-tools-preview
Build
cargo build
pmnxis@lmabdaDeb ~/Develop/billmock-app-rs master cargo build
info: syncing channel updates for 'nightly-2023-08-24-x86_64-unknown-linux-gnu'
info: latest update on 2023-08-24, rust version 1.74.0-nightly (249595b75 2023-08-23)
info: downloading component 'cargo'
info: downloading component 'clippy'
info: downloading component 'llvm-tools'
info: downloading component 'rust-docs'
info: downloading component 'rust-src'
info: downloading component 'rust-std' for 'thumbv6m-none-eabi'
info: downloading component 'rust-std'
info: downloading component 'rustc'
info: downloading component 'rustfmt'
info: installing component 'cargo'
info: installing component 'clippy'
info: installing component 'llvm-tools'
info: installing component 'rust-docs'
info: installing component 'rust-src'
info: installing component 'rust-std' for 'thumbv6m-none-eabi'
info: installing component 'rust-std'
info: installing component 'rustc'
info: installing component 'rustfmt'
Updating crates.io index
Updating git repository `https://github.com/embassy-rs/embassy.git`
Cargo Run
pmnxis@lmabdaDeb ~/Develop/billmock-app-rs master cargo run
Finished dev [optimized + debuginfo] target(s) in 0.06s
Running `probe-run --chip STM32G030C8Tx --log-format '{t} [{L}][ {f}:{l} ] {s}' target/thumbv6m-none-eabi/debug/billmock-app-rs`
(HOST) INFO flashing program (45 pages / 45.00 KiB)
(HOST) INFO success!
────────────────────────────────────────────────────────────────────────────────
0.000000 [DEBUG][ fmt.rs:130 ] rcc: Clocks { sys: Hertz(16000000), apb1: Hertz(16000000), apb1_tim: Hertz(16000000), ahb1: Hertz(16000000) }
+-----------------------------------------------------------+
Firmware Ver : billmock-app-rs 0.1.2
Git Hash : bf976acd38633f7204e9423def8b5b062e0a0ad3
Git Datetime : 2023-09-17 20:55:10 +0900 | bf976ac
+-----------------------------------------------------------+
0.004272 [TRACE][ fmt.rs:117 ] USART: presc=1, div=0x0000008b (mantissa = 8, fraction = 11)
0.004638 [TRACE][ fmt.rs:117 ] Using 16 bit oversampling, desired baudrate: 115200, actual baudrate: 115107
1.006286 [WARN ][ serial_device.rs:156 ] The module use a example library. It may not work in real fields.
OUT[ LED2-Indicator] : Low
OUT[ LED1-Indicator] : Low
Dependency Injection for card reader
하드웨어
현재까지 0.2, 0.3, 0.4, 0.4-Mini 총 4가지의 Hardware revision이 있으며 실제로 사용 가능한 것은 0.4 와 0.4 Mini 에 맞춰서 개발되고 있습니다.
핀맵이나 설치를 확인하기 위해서는 좌측의 목차에서 원하는 항목을 확인하십시오.
자세한 HW schematic은 BillMock-HW-RELEASE 에서 확인이 가능합니다.
하드웨어 라이센스 관련하여
회로도의 원본데이터는 비공개 라이센스이나, PDF된 Schematic은 CC-BY-SA 3.0 라이센스로 배포가됩니다. 따라서 gerber나 양산에서 쓰이는 BOM 과 같은 데이터는 일절 공개되지않습니다. 또한 해당 회로도(PDF) 를 참고하여 만든 회로는 아래와 같은 조건을 따라야만 합니다.
영리적 사용시 필히 참고해주십시오
-
저작자표시 — 적절한 출처와, 해당 라이센스 링크를 표시하고, 변경이 있는 경우 공지해야 합니다. 합리적인 방식으로 이렇게 하면 되지만, 이용 허락권자가 귀하에게 권리를 부여한다거나 귀하의 사용을 허가한다는 내용을 나타내서는 안 됩니다.
-
동일조건변경허락 — 이 저작물을 리믹스, 변형하거나 2차적 저작물을 작성하고 그 결과물을 공유할 경우에는 원 저작물과 동일한 조건의 CCL을 적용하여야 합니다.