## ARM PC
이번에 처음본 녀석으로 arm pc 라는 녀석이다.
ATX 규격홀과 표준 pc 파워를 이용한 arm 보드인데 우분투 11.10이 올라가있다.
우분투에서 ARMv5 부터 패키지를 유지하고 있어서 쓰는데 큰 문제는 없어보이고
원래개발 컨셉은
대표이사님의 영혼이 담긴 샤우팅으로 요약
"크로스컴파일 개나줘버려 우린 개발보드에서 직접 컴파일한다!!"
확실히 ffmpeg같은건 크로스컴파일 환경이 괴랄해서 욕나오는데
늦더라도 넉넉한 메모리에서 컴파일 돌리는건 확실히 매력이고
우분투에서 패키지가 존재하니 lib***-dev 패키지가 존재하면 이러한 부담역시 한번에 해결할 수 있는 멋진 솔루션이다.
(대충 가격은 arm PC로서는 두자수 중반이라고 하니 저전력 서버로서의 가능성도 조금은 가져본다.)
## Zeroboot
제로부트는 가장 흥미를 가지던 녀석인데, 사용자 입장에서는 매우 좋은 기술이지만
임베디드 장비를 개발하는 개발자 입장에서는 크게 도움이 되지 않는 녀석이라는 면에서는 조금 실망 ㅠ.ㅠ
임베디드 개발의 경우 타겟 보드 자체를 완전 리부팅을 해야 하는데 이렇게 시스템의 변화 이후에 리부팅에 대해서는
스냅샷을 떠도 의미가 없고, 뜨는 시간보다는 리부팅 하는게 이득일테니
개발자에게는 1분의 부팅시간을 커피타임으로 쓸 수 있는 기회가 아직은 날아가지 않았으니 희망차게 커피나 타러... (응?)
아무튼, 과거의 하이버네이션이나 현재의 최대절전모드(머 그게 그거지만)와 유사하지만
저장하는 용량이나 복구방법의 차이로 인해 더욱 빠르게 하는 것이 특징이고,
대략적으로 부팅시에 MTD로 부터 일어오는 스냅샷의 크기는 최소 1MB 정도부터 시작을 한다고 한다.
그러니 빠를수 밖에~ 란 생각도 들면서도 하이버네이션이 모든 메모리를 덤프하고 그걸 복구하는데 한참 걸린걸 감안하면
그걸 얼마나 추려낸다고 노가다를 했을까, 하드웨어 분석한다고 얼마나 고생했을까라는게 마구마구 상상이 된다 -_-
스탠드 / 암 관련
1. 모니터 암(스탠드)은 책상공간 확보가 목적이라면 강추
2. 단, 책상에 유리가 있을 경우 고정유형과 모니터 무게를 고려할 것. 혹은 강화유리로 교체할 것
3. 먼지가 앉으면 검은색은 은근 티 잘남. 게다가 딱기도 쉬운 구조가 아니니 은색이 나을지도 -_-
4. 모니터 피벗기능이 있는 녀석은 그리 큰 쓸모는 없음(모니터 정렬하기만 빡심)
모니터 관련
1. 피벗이 아니더라도 편의를 위해서 모니터는 VESA 마운트 4개를 다 고정하는 녀석이 좋음
2. 모니터는 목까지 완전히 뽑히는 녀석이 좋음
3. 21인치 이상의 모니터 Triple은 목에 매우 안 좋음(마우스 굴리다가 지침)
(시력이 무지 좋고 + 시야각이 160도 급이라면 고려해볼만 할지도)
4. 21인치 이상의 모니터를 Triple로 쓰고 싶다면 세로로 세워서 트리플 하는 것을 추천
5. 그게 아니라면 2x2 로 쓰는게 무난할 듯 (하지만 무게 제한은 어쩔?)
케이블 관련
1. 본체가 멀리 떨어진다면 2M 이상의 케이블을 고려할 것. 중앙에서 케이블이 내려가므로 1.5M로는 짧은편
2. 거리 및 케이블 정리를 고려하면, DVI는 좀 쥐약(안꺾여!) D-SUB나 HDMI 추천
3. 파워는 본체에 가깝게 두고 멀티탭을 모니터로 올려보내서 정리하면 깔끔
i2c는 1선은 데이터 1선은 클럭을 보내는 구조인데
문서마다 조금씩 다르게 나오고 칩마다 설명이 달라서 모호한 감이 없진 않지만..
아무튼 용어를 정의하자면
i2c는 Master와 Slave로 구성되며
- Master는 SCL을 통해 클럭을 생성하며, 데이터를 요청하는 주체가 되는 녀석이고
- Slave는 Master의 요청에 따라 데이터를 받거나 요청시 보내주는 녀석이다.
2개의 선로를 통해 통신을 하며
- SDA는 데이터를 주고 받으며(즉, Master 기준 Input / Output 전환이 필요하다)
- SCL은 데이터 구분을 위한 클럭을 Master에 의해서 유지하게 된다.
통신을 주고 받기 위해 Slave에는 Address가 부여된다.
- 7bit의 경우 상위 4bit의 host Address 하위 3bit의 동일 장치에 대한 구분용 device address가 존재한다.
- 10bit도 존재한다.(자세한 내용은 http://www.i2c-bus.org/addressing/10-bit-addressing/ 참조)
Bus Empty / Start(start&start continue) / 1bit (data&ACK) / STOP 의 상황이 있다.
- Bus Empty 는 SCL 과 SDA가 모두 High로 아무도 버스를 사용하지 않는 상황
- Start는 SCL이 High인 상황에서 SDA가 High 에서 Low로 떨어지는 상황
- Stop은 SCL이 High인 상황에서 SDA가 Low 에서 High로 올라가는 상황
- 1bit는 SCL을 SDA가 감싸면서 Low -> High-> Low로 변화하는 상황이다.
통신은 다음의 순서를 따른다.
- Bus Empty 인 것을 확인하고(둘다 high 임을 확인)
- Start로 SDA와 SCL을 low로 설정하고
- 7bit Address를 보내고 1bit의 Write/Read를 보내고(대개는 합쳐서 1byte로 처리함)
- ACK를 수신하기 위해 SDA의 방향을 Master기준 input으로 변경하고 SCL만 출력한다. (클럭만 내고 처리안하기도 함)
- 실어보낼 데이터를 전송하고(1byte)
- ACK를 수신하기 위해 SDA의 방향을 Master기준 input으로 변경하고 SCL만 출력한다. (클럭만 내고 처리안하기도 함)
- 더이상 전송할 데이터가 없으면 SDA와 SCL을 high로 설정해 Stop임을 알리고 버스를 놓는다.
i2c 장치에 따라서 다음과 같이 전송을 하게 된다.
(장치내부의 레지스터 주소로 앞의 DATA를 1바이트나 2바이트로 사용하기도 한다.)
- S / ADDR / ACK / DATA / P
- S / ADDR / ACK / DATA / ACK / DATA / ACK / P
- S / ADDR / ACK / DATA / ACK / DATA / ACK / Sr / DATA / ACK / DATA / ACK / P