Showing Posts From
갑자기
- 25 Dec, 2025
수요일 오후, 갑자기 '이건 사실 하드웨어 이슈 같은데요?'
수요일 오후, 갑자기 '이건 사실 하드웨어 이슈 같은데요?' 오후 3시, 그 순간 테스트를 돌렸다. 세 번째다. 같은 증상이다. UART 통신이 중간에 끊긴다. 정확히 2.3초 후. 매번 같은 타이밍이다. 소프트웨어 타이밍 이슈는 이렇게 정확하지 않다. 변수가 있다. 인터럽트 우선순위, 태스크 스케줄링, DMA 버퍼 크기... 뭔가 하나라도 달라지면 타이밍이 흔들린다. 근데 이건 딱 2.3초다. 오차 ±10ms. 오실로스코ープ를 켰다. TX 핀에 프로브를 댔다. 파형을 봤다. 2.3초 지점에서 전압이 이상하다. 3.3V로 올라가야 하는데 2.8V에서 멈춘다. 그리고 다시 0V로 떨어진다. "아..." 이건 내 문제가 아니다.HW팀에 연락 슬랙을 열었다. HW팀 채널에 메시지를 썼다. "UART TX 핀 파형 이상한 것 같습니다. 2.3초 후 전압이 2.8V에서 멈춥니다. 회로 확인 부탁드려요." 오실로스코ープ 캡처 이미지를 첨부했다. 빨간 마커로 이상한 부분을 표시했다. 답장이 왔다. 10분 후. "회로도 확인해볼게요. 근데 레이아웃은 이미 나간 상태라..." 레이아웃이 나갔다는 건 PCB 제작이 들어갔다는 뜻이다. 만약 회로 문제면 다시 만들어야 한다. 비용이 수백만원이다. 일정은 2주 늦어진다. "일단 확인 부탁드립니다." 답장을 보내고 자리에서 일어났다. 커피를 마시러 갔다. 내가 할 수 있는 건 기다리는 것뿐이다.목요일, 답이 없다 다음 날 아침. HW팀 김대리가 왔다. "어제 확인해봤는데요." 그는 노트북을 들고 있었다. 회로도를 보여줬다. "UART TX 핀이랑 LED 핀이 같은 풀업 저항을 쓰고 있어요. LED가 켜지면서 전류가 많이 흐르면 전압이 떨어질 수 있겠네요." "아..." LED였다. 우리가 디버깅용으로 달아놓은 LED다. 2.3초마다 깜빡이게 해놨다. 통신 상태를 보려고. "근데 이건 설계 단계에서 검증했어야 하는 거 아닌가요?" 김대리가 어색하게 웃었다. "시뮬레이션에서는 안 나왔어요. 실제로 만들어보니까..." "그럼 어떻게 해야 하나요?" "일단 임시 방편으로 LED 빼고 테스트해보세요. 근본적으로는 회로 수정해야 하는데..." 그는 말을 흐렸다. 레이아웃 다시 나가면 일정이 늦어진다는 걸 알고 있었다. 금요일, 회의 회의가 잡혔다. 오후 2시. 회의실에 HW팀, SW팀, PM이 모였다. PM이 물었다. "정확한 원인이 뭡니까?" HW팀 김대리가 설명했다. 풀업 저항, LED, 전압 강하... 기술적인 이야기를 5분 정도 했다. PM이 고개를 끄덕였다. "그럼 해결 방법은요?" "회로 수정입니다. PCB 다시 제작해야 합니다." "비용이랑 일정은요?" "비용은 300만원 정도. 일정은 2주 추가입니다." PM의 표정이 굳었다. 그는 노트북을 봤다. 간트 차트가 보였다. 일정이 빨간색으로 표시되어 있었다. "2주면... 양산 일정을 못 맞추는데요." 침묵이 흘렀다. 그때 우리 팀장이 말했다. "임시 방편으로 LED를 빼면 되지 않나요? 일단 양산은 LED 없이 나가고, 다음 버전에서 회로 수정하는 걸로." PM이 고개를 끄덕였다. "그게 낫겠네요. 일단 LED 빼고 테스트 진행하세요." 회의가 끝났다. 30분이 걸렸다. 결론은 'LED를 빼자'였다.월요일, 다시 내 일 주말이 지났다. 월요일 아침. 출근했다. HW팀에서 LED를 뺀 보드를 가져왔다. 납땜 자국이 있었다. 수작업으로 제거한 거다. "테스트 부탁드립니다." 보드를 받았다. 내 자리로 돌아왔다. 코드를 올렸다. 테스트를 돌렸다. UART 통신이 정상적으로 동작했다. 2.3초가 지나도 끊기지 않았다. 10분을 돌려봤다. 문제없었다. 슬랙에 메시지를 썼다. "테스트 정상 완료했습니다." 답장이 왔다. "수고하셨습니다." 그게 끝이었다. 일주일이 걸렸다. 실제 작업 시간은 1시간도 안 됐다. 나머지는 기다림이었다. 화요일, 또 다른 문제 다음 날. 새로운 문제가 생겼다. SPI 통신이 안 된다. 센서에서 데이터가 안 온다. 레지스터 설정을 확인했다. 문제없었다. 클럭 주파수를 확인했다. 문제없었다. 오실로스코ープ를 켰다. CLK, MOSI, MISO 핀에 프로브를 댔다. 파형을 봤다. CLK는 정상이다. MOSI도 정상이다. 근데 MISO가 이상하다. 신호가 너무 약하다. 1.2V밖에 안 나온다. 3.3V가 나와야 한다. "또...?" 이것도 하드웨어 문제 같다. 풀업 저항? 아니면 센서 불량? 슬랙을 열었다. HW팀 채널에 메시지를 썼다. "SPI MISO 핀 전압이 1.2V밖에 안 나옵니다. 회로 확인 부탁드려요." 오실로스코프 캡처를 첨부했다. 답장이 왔다. "확인해볼게요." 또 기다림이다. 수요일, 1주일 후 일주일이 지났다. HW팀에서 확인 결과가 왔다. 센서 불량이었다. 다른 센서로 교체했다. 테스트를 돌렸다. 정상 동작했다. "감사합니다." 답장을 보냈다. 결국 2주가 걸렸다. UART 문제 1주일, SPI 문제 1주일. 내가 실제로 작업한 시간은 2시간도 안 됐다. 코드를 올리고, 테스트를 돌리고, 결과를 확인하는 시간. 나머지는 기다림이었다. 이게 펌웨어 개발이다 펌웨어 개발은 소프트웨어만 다루는 게 아니다. 하드웨어도 같이 다룬다. 아니, 정확히는 하드웨어 문제를 찾아내야 한다. 코드가 완벽해도 회로가 잘못되면 안 된다. 레지스터 설정이 맞아도 전압이 이상하면 안 된다. 타이밍이 정확해도 부품이 불량이면 안 된다. 그리고 그걸 판단하는 게 내 일이다. "이건 소프트웨어 문제인가, 하드웨어 문제인가?" 오실로스코ープ를 보고 판단한다. 파형을 보고 판단한다. 전압을 측정하고 판단한다. 그리고 하드웨어 문제면 HW팀에 넘긴다. 기다린다. 확인 결과가 온다. 다시 테스트한다. 이 과정이 며칠씩 걸린다. 때로는 일주일씩 걸린다. 내가 할 수 있는 건 기다리는 것뿐이다. 다음 프로젝트는 다음 프로젝트도 똑같을 거다. 코드를 짠다. 테스트를 돌린다. 문제가 생긴다. 디버깅한다. 하드웨어 문제를 발견한다. HW팀에 넘긴다. 기다린다. 이게 반복된다. 웹 개발자들이 부럽다. 걔네는 하드웨어 걱정이 없다. 서버가 다운되면 재시작하면 된다. 버그가 생기면 패치하면 된다. 나는 보드가 고장 나면 새로 만들어야 한다. 버그가 양산에 들어가면 리콜이다. 비용이 억 단위다. 그래서 더 신중해진다. 더 많이 테스트한다. 더 많이 확인한다. 그리고 하드웨어 문제를 찾아낸다. 오실로스코프를 들고. 금요일 저녁 이번 주도 야근이다. 새로운 보드가 왔다. 이번엔 회로가 수정된 버전이다. LED 문제가 해결됐다. 코드를 올렸다. 테스트를 돌렸다. 정상 동작했다. "드디어..." 2주 만이다. UART 문제가 완전히 해결됐다. 슬랙에 메시지를 썼다. "최종 테스트 완료했습니다. 양산 가능합니다." PM에게서 답장이 왔다. "고생하셨습니다." 그게 끝이다. 퇴근했다. 시계를 봤다. 밤 10시다. 집에 도착했다. 맥주를 꺼냈다. 마셨다. 내일은 토요일이다. 쉴 수 있다. 그리고 월요일이 되면 또 출근한다. 새로운 문제가 기다리고 있을 것이다. "이건 사실 하드웨어 이슈 같은데요?" 또 이 말을 하게 될 것이다.오실로스코프 프로브를 정리하면서 생각했다. 다음엔 HW 검증을 더 빡빡하게 해야겠다고. 근데 또 새로운 문제가 생길 거다. 그게 이 일이니까.