2022.08.18 - [임베디드 소프트웨어/Duino Coin] - Duino coin mining rig #1
저번 글에서 대강 개요 정도는 파악했으니까 조금 더 디테일하게 보자고~~ 우선 하드웨어 구성부터!👇👇👇
우선 두이노 코인 서버에 연결하기 위한 네트워크 IC로 W5100S가 사용되었고 이와 곧바로 연결된 RPI-PICO가 gateway이자 Master를 이루게 해놨어. 그리고 10개의 RPI-PICO가 Master와 I2C로 연결되어 채굴을 위한 Hash 계산기로 쓰일거야. 심플하게 정리하자면 1개의 마스터에서 두이노 코인과 연결해서 채굴을 위한 해쉬 문제를 얻어와 10개의 슬레이브(20개의 코어)에 할당하고 해쉬 연산이 끝나면 마스터가 정답을 읽어와 서버에 보고하게 되는 거지. 그 외에 하드웨어는 채굴 상태확인을 TFT LCD, 그리고 POE(Power over ethernet) 전원 옵션 정도가 있어. 아래는 실제 하드웨어.👇👇👇
사실 하드웨어에는 크게 신경쓸 부분이 없어. 펌웨어로 넘어가서 마스터와 슬레이브 동작을 구분해보자구!
Master
- 하드웨어 및 I2C 마스터 모드 초기화
- DHCP로 IP 주소 할당받기(공유기 통해서 접속하는 거~)
- 두이노 코인 서버에서 접속해서 pool(해시 문제주는 서버) 주소 얻어오기
- I2C 버스 스캔(I2C 슬레이브 주소 알아내기)
- Slave들의 상태를 읽어서 IDLE 상태이면 서버에 해시 문제 요청
- Slave에 해시 문제 할당/연산 결과 대기
- Slave들의 상태를 읽어서 HASH_DONE 상태면 서버에 결과 보고
- 4-5 반복.
Master에서는 각 단계별 state를 정의고 switch case문으로 state machine 만들듯이 코딩하면 될 듯.
Slave
- 하드웨어 및 I2C 슬레이브 모드 초기화
- 상태 업데이트 => IDLE(노는 중), BUSY(계산 중), HASH_DONE(계산 완료)
- Master에서 상태를 요청하면 상태 반환
- Master에서 해시 문제를 할당하면 해시 계산
- Master에서 해시 결과를 요청하면 결과 반환
- 2-5 반복.
Slave는 Master 명령에 의해서만 동작해야하니까 I2C 수신 인터럽트에서 명령을 구분하고 동작을 위한 flag를 설정하는 방식으로 코딩을 하면 될 것 같아... 이쯤되면 그냥 코드 보는게 편하겠다 싶은 사람이 있을 거야 그치?👇👇
https://github.com/Wiznet/RP2040-HAT-MINING-C
ㅋㅋㅋㅋㅋ 사실 나는 구현을 이미 끝냈으니까 이렇게 한꺼번에 설명을 하지~ 실제 개발할 때는 주어진 개발기간이 너무 짧아서 설계도 못하고 막코딩 ㅠㅠ example project라서 얼마나 다행인지 ㅠㅠ 제발 니들은 나처럼 막코딩하지 말고 차분하게 설계해가면서 하자 ㅠㅠ 하드웨어도 펌웨어도 설계가 중요해! 특히 RTOS, 인터럽트, DMA 난무하는 요즘 펌웨어에서는 더더욱 필수야! printf 치기전에 찬찬히 설계부터! 제발~~~
음.. 암튼 코드 짤 때는 나름 I2C 마스터/슬레이브, 프로토콜 정의하고, 두이노 코인 서버, RP2040 듀얼코어 사용, 기타 등등 할게 어지간히도 많았는데 막상 글로 쓰려니까... github 링크로 끝나버리네;;; 코드를 설명하는 건 의미가 없으니까 알아서들 깃헙 보자구. readme.md에 코드 어떻게 빌드하는지도 나와 있으니까 비슷하게 하드웨어 구성할 수 있으면 충분히들 따라할 수 있을 거야.
나머지는 특이한 점들만 설명을 할게.
1. 해시 연산 코어당 tcp 소켓 연결을 유지해야 함.
두이노 해시 문제를 받으면 결과를 보고할 때까지 tcp socket을 유지해야 해. 해시 계산에 시간이 너무 많이 걸리면 두이노 코인 서버가 소켓을 닫아버리는데 그러면 해시 문제도 날라가. 보고해봐야 BAD! 2코어짜리 slave가 최대 10개까지 20개까지 열어둘 수 있어야 하는데 W5100S는 하드웨어 소켓이 4개 뿐이야. 그럼 망한건가? ㅎㅎㅎ 아냐 W5100S를 Macraw모드로 사용하면 LWIP와 같은 소프트웨어 TCP/IP 스택을 사용할 수 있어. 덕분에 소켓도 20개 열어둘 수 있고 ㅎ 코드를 살펴보면 Master의 0번 코어에서는 슬레이브 관리 등 일반 펌웨어가 돌고 있고 1번 코어에서는 LWIP 스택이 돌고 있지.
2. 두이노 코인 채굴기 수 제한
두이노 코인의 miner의 갯수에는 한계가 있어. 기본적으로 몇개까지 허용하는지 메뉴얼은 없는데 8개 이하인 것 같아. 그보다 더 많아지면 Hash 정확도와 관계없이 채굴 효율이 대폭 낮아져. 그래서 20개 코어에서 최대의 효율을 얻어내려면 wallet.duinocoin.com 에서 아래와 같이 mining slot을 추가로 구매해야 하는 듯해. 언제 25000개 모으냐;;;; (아두이노 1개로 15-20 duco/day)
으아아아아아아!!~!~! 말주변이 없어서 미안! 설명 드럽게 못하네;;;;;🤨 이게 프로젝트 중간중간 글 써가면서 했어야 했는데 😢 한꺼번에 하려니까 엄청 헤맨다;;; 암튼 궁금한 점 있으면 따로 질문하도록 하자!
아래는 위즈네트에서 만든 관련 유튜브👇👇
https://www.youtube.com/watch?v=PgTCN2rn1C0
'임베디드 소프트웨어 > Duino Coin' 카테고리의 다른 글
Duino coin mining rig #1 (1) | 2022.08.18 |
---|