[실험실의 장비를 사용해야 하는 이유]
이전에 아무리 소프트웨어를 주의 깊게 테스트했다고 하더라도 결국에는 실험실에서 실제로 시스템을 테스트하고 디버깅해봐야 합니다. 어떤 자료를 보더라도 몇 시간 만에 한 번씩 발생하거나 등을 돌리고 있을 때만 발생하는 기괴하고 일관성 없는 버그에 대해서는 올바른 답을 내려 줄 수가 없습니다. 그러나 이번에는 임베디드 소프트웨어 개발자들에게 유용한 장비들에 대한 소개를 위한 글을 써보려고 합니다. 이런 장비들을 사용하기 위해서는 하드웨어가 어떻게 동작하는지에 대해서 익숙할 필요성이 있습니다.
[전압계와 저항계]
만약에 소프트웨어를 테스트하는 하드웨어의 정확한 동작과 안정성이 의심스럽다면 그다지 비싸지 않은 두 개의 아주아주 유용한 장비로, 두 점간의 전위의 차를 재는 전압계와 저항의 차를 재는 저항계를 사용할 수 있습니다. 두 가지 기능을 모두 갖는 제품은 일반적으로 멀티미터라고 부릅니다. 테스터라고 부르기도 하고요.
소프트웨어 엔지니어는 전압계를 회로에 있는 칩에 전원이 공급되는지를 확인하는데 주로 이용합니다. 칩의 다리가 부러지거나, 배선을 잘못했거나, 퓨즈가 나갔거나, 파워를 연결하거나 켜는데 실패하는 등의 여러 가지 다양한 이유로 시스템은 전원을 공급받는데 실패할 가능성이 있고 어떤 소프트웨어의 노력도 이런 시스템을 동작하게 만들 수 없습니다. 전압계를 사용하는 가장 일반적인 방법은 전원을 켜고, 한쪽 프로브는 VCC에 연결하고 다른 쪽 프로브는 그라운드에 연결하는 것입니다. 전압계가 올바른 전압을 가리키지 않는 경우, 하드웨어에 문제가 있는 거라고 생각하면 됩니다.
저항계의 일반적인 용도는 연결되어야 할 지점이 연결되었는지 아니면 연결되지 않아야 하는 것이 연결되지는 않았는지 점검하기 위한 겁니다. 가령 마이크로프로세서의 주소 신호 선 중의 하나라도 RAM에 연결되지 않았다면 프로브들은 측정되어야 할 곳에 위치시킵니다. 만약에 저항계의 미터가 0 ohm을 가리킨다면 두 지점 간에 저항이 없기 때문에 이 두 지점이 연결되었다는 것을 의미합니다. 이런 것을 보려면 프로브들끼리 연결해 보면 알 수 있습니다. 대부분의 저항계는 두 지점이 연결되어 있지 않은 것을 의미하는 저항이 무한대 아니면 무한대에 가까운 것임을 나타내는 특별한 표시를 가지고 있습니다. 이런 것을 확인하려면 두 개의 프로브를 공간상에서 떨어뜨리고 미터계를 봅시다.
저항계가 0도 아니고 무한대도 아닌 중간 값을 나타낸다면, 두 지점은 서로 직접 연결되어 있는 것은 아니고 사이에 회로 소 자들이 있어서 전류가 어느 정도 흐름을 나타냅니다. 이럴 때는 정상이라고 보는 게 일반적입니다.
[오실로스코프]
오실로스코프 또는 스코프는 시간에 대한 전압의 그래프를 나타내는 장비입니다. 시간은 가로축을 따라 표시되고 전압은 세로축을 따라 표시됩니다. 오실로스코프는 아날로그 장비입니다. 단지 시그널이 하이인지 로우인지를 표시하는 것을 넘어서 실제 전압을 나타냅니다. 일반적으로 오실로스코프의 특징은 다음과 같습니다.
- 동시에 하나 이상의 시그널을 측정할 수 있음
- 상당히 넓은 범위로 시간과 전압의 스케일을 조정할 수 있음
- 시그널에서 미리 설정한 상황이 발생했을 때 무엇을 해야 하는 지를 결정하는 트리거를 언제 사용해서 그래프를 그릴 지를 조정할 수 있음. 가령 시그널이 4.25 볼트에 도달하고 계속 증가할 때 오실로스코프가 그래프를 그리도록 할 수 있음
오실로스코프는 하드웨어 엔지니어들에게는 정말로 유용합니다. 소프트웨어 엔지니어는 다른 이유보다는 몇 가지 목적으로 사용하곤 합니다.
- 오실로스코프를 이미 손에 가지고 있고 전압계는 실험실 어디에 있는지 모른다면, 오실로스코프를 전압계로 사용할 수 있음. 만약 시그널의 전압이 변하지 않는다면, 오실로스코프는 시그널의 전압을 가로 축의 선을 사용해서 나타냄. 그러나 먼저 미리 알고 있는 그라운드 시그널을 측정해서 오실로스코프에서 그라운드에 해당하는 선이 세로축에서 어디에 있는 지를 알아야 함.
- 오실로스코프를 사용해서 마이크로프로세서의 클럭 입력을 조사해보는 것으로 회로가 정상적으로 동작하는 지를 점검할 수 있음. 오실로스코프의 선이 직선이라면 클럭 시그널은 마이크로프로세서에 들어가지 않고 어떤 명령어도 실행되지 않는다는 것을 의미함. 마찬가지로, RAM으로 연결되는 어드레서, 데이터, 칩 인에이블 시그널을 조사해봐서 프로그램이 무엇인가를 하고 있는지 없는 지를 알 수 있음.
- 시그널이 기대하는 대로 변하는 지를 알아보는 데 사용할 수 있음. 예를 들자면 소프트웨어가 반복해서 High와 Low를 반복하는 신호를 만들어 낸다면, 올바로 신호가 나오는 지를 오실로스코프를 이용해서 검사할 수 있음.
- 그라운드에서 VCC로 아니면 그 반대로 수 나노세컨드 만에 바뀌어야 하는 디지털 신호가 바뀌는데 매우 오랜 시간이 걸리는 것을 보게 된다면, 하드웨어 버그를 찾아낸 것임. 이런 것은 부하 문제, 아니면 버스 쟁탈, 잘못된 부품이 있음을 나타내고, 하드웨어 엔지니어는 이것을 고치게 됨.
보통 시각에서 오실로스코프는 화면을 통해서 광선을 계속해서 주사합니다. 그러므로 신호를 보기 위해서는 주기적으로 반복되는 신호를 갖던가 트리거를 조정해서 항상 같은 가로축에 신호가 나타나도록 해야 합니다.
스토리지 오실로스코프 또는 스토리지 스코프라고 불리는 비싼 오실로스코프는 신호를 가로채서 오실로스코프의 메모리에 저장을 합니다. 스토리지 스코프의 화면 출력은 그 메모리로부터 얻어집니다. 스토리지 스코프는 단 한번 발생하는 이벤트도 잡아낼 수 있긴 하지만, 일반적인 오실로스코프보다 너무 비싸서 대부분의 소프트웨어 엔지니어에게는 적합하지 않습니다.
평범한 오실로스코프의 모습을 살펴보면 회로를 측정할 수 있는 프로브를 선으로 연결할 수 있는 단자를 가지고 있습니다. 프로브는 측정하고 싶은 회로에 붙일 수 있는 뾰족한 금속 탐침을 가지고 있습니다. 한쪽 끝에 조그마한 집게가 달려있는 프로브 덮개를 사용해서 회로에 고정시킨 후 손을 자유롭게 사용하도록 할 수도 있습니다. 각각의 프로브는 짧은 선으로 되어 있는 접지선을 가지고 있습니다. 접지선은 보통 회로에 쉽게 연결할 수 있도록 악어 집게로 되어 있거나 그와 비슷한 모양으로 되어 있곤 합니다.
오실로스코프 자체는 앞에서 말했던 그래프들을 나타내 주는 화면 표시 장치를 가지고 있습니다. 또한 다양한 조정 손잡이와 버튼도 가지고 있습니다. 대부분이 오실로스코프는 화면에서 눈을 떼지 않고 조정을 할 수 있도록 다양한 크기의 조정 손잡이와 버튼을 가지고 있습니다. 조정 손잡이 대신에 최신 오실로스코프는 온스크린 메뉴와 스크린 옆의 버튼을 사용하기도 합니다.
일반적인 오실로스코프 화면에서는 마이크로프로세서의 입력 시그널로 예상할 수 있는 신호의 모습을 볼 수 있습니다. 의심스러운 클럭 시그널은 주기적으로 로우에서 하이로 올라가서 하이에 머물러 있는 형태가 아닌 경우를 말합니다. 전혀 동작을 하지 않는 클럭 회로도 있을 수 있고요. 롬의 칩 인에이블 시그널을 측정했을 때 예상할 수 있는 신호의 모습도 있는데 마이크로프로세서가 롬으로부터 값을 읽을 때마다, 시그널은 로우로 변합니다. 때때로 마이크로프로세서는 램의 값을 읽거나 쓰는 것 같은 다른 일을 하기 때문에 이 시그널을 불규칙하다고 할 수 있습니다.
오실로스코프를 사용하는 데이는 중요하긴 하지만 간과하기 쉬운 것이 하나 있습니다. 바로 접지선인데요, 접지선은 장식용으로 있는 것이 아닙니다. 간혹 가다가 접지선을 연결하지 않아도 오실로스코프가 제대로 동작하는 것처럼 보일 때도 있긴 합니다만, 항상 제대로 동작하는 것은 아니기 때문에 이렇게 하는 건 매우 안 좋은 습관입니다. 불행하게도 접지선이 연결되지 않아서 오실로스코프가 동작을 제대로 하지 않더라도 이 것을 경고하는 RED LED는 없습니다. 단순하게 화면은 평소처럼 보일 겁니다. 그러나 그 값들은 잘못된 값을 나타내고 있을 겁니다. 여기서 배울 수 있는 단순한 교훈은 항상 오실로스코프가 올바른 값을 나타내게 하기 위해서 접지선을 연결하라는 것입니다.
'IT > 임베디드 시스템' 카테고리의 다른 글
임베디드 소프트웨어 디버깅 장비3 - 인 서킷 에뮬레이터 (0) | 2020.07.03 |
---|---|
임베디드 소프트웨어 디버깅 장비2 - 로직 어날라이저 (0) | 2020.07.02 |
디버깅 테크닉 - 명령어 시뮬레이션 & assert 매크로 (0) | 2020.06.25 |
디버깅을 위한 호스트 시스템에서의 테스팅3 - 고급기술 그리고 반론/단점 (0) | 2020.06.23 |
디버깅을 위한 호스트 시스템에서의 테스팅2 - 인터럽트 루틴 호출 / 스크립트, 출력 파일 (0) | 2020.06.23 |
댓글