MSP430F1611 보드를 사놓고 외부 크리스탈의 발진체크를 할 때입니다.
XIN2/XOUT2에 연결된 오실레이터의 신호가 검출되지 않는 것입니다.
BCSCTL1의 XT2OFF bit도 '0'으로 설정하였고, 혹시나 해서 SR의 OSCOFF까지 '0'으로 재차 써넣었습니다.
그래도 여전히 XT2의 발진은 전혀 일어나지가 않았습니다.
결론 부터 말씀드리자면 문제는 Oscilloscope의 Probe였던 것입니다.
이 Probe라는 것의 측정을 위한 leakage가 생각보다 크다는 것입니다.
때문에 발진을 위해 최소의 전류로 구동하는 저전력의 내장 오실레이터는
이 프로브에 의해 전류가 유실되면서 발진을 못하게 되는 것입니다.
이런 경우 어떻게 하느냐고 하면, 그냥 외부 GPIO포트로 펄스를 출력해서 찍는 수 밖에없습니다.
그럼 내부 오실레이터와 어떻게 구분하냐고 하면, 방법이 없습니다. 자기가한 세팅을 믿는 수 밖에요..^^
하여간 위와 같은 문제는 비단 새로운 프로세서를 처음 접하는 사용자 - 전문가 포함 - 뿐만 아니라,
저같은 System IC의 test & evaluation을 해야하는 엔지니어에게는 쉽게 일어나는 일입니다.
일단 살았는지 죽었는 지를 확인하기 전에 확인하는 것이 'POWER', 'CLOCK'그리고 'RESET' 이기 때문입니다.
프로세서에 있어서는 이것만이라도 우선 정상이면 다음 단계로 들어갈 수 있습니다.
그러면 왜 Oscillation PAD의drive strength를 높히면 되지 않는냐는 것인데,
drive strength를 높히게 되면 전류소모가 커집니다. 더군다나 이로인해overshoot이 발생하게 되고,
이것이 노이즈로 작동하기도 합니다.
때문에 적정 수준의 안정한 발진이 중요하지요.
그리고 발진 주파수가 높아지게 되면 더 높은 에너지를 요구하개됩니다.
이에 관해서는 물리시간에서 배우셨겠지만,
Frequency = Energy
입니다.
높은 주파수가 되면, 그 만큼, 큰 에너지를 소모하게 되어있고, 역으로 발전기는 큰 에너지를 얻게됩니다.
(물론 진폭이 같을 경우입니다.)
특히나 System IC에 있어서는 이러한 발진과 같은 Transition이 자주 그리고 빠르게 일어나는 PAD에는
drive strength가 높은 PAD를 사용합니다.
일단drive strength가 높아지면, 에너지도 많이 들지만, 순간적인 switching을 하기 위해
에너지가 한꺼번에 몰리면서 overshooting으로 인해 bouncing이 일어납니다.
에너지가 순간적으로 사용하는 것은 물론이거니와, bouncing이 일어남으로 인해 전원측에 부하가 걸리고,
신호는 물론 전원측에 noise가 끼어들게 됩니다.
이러한 영향을 최소화 하기 위해, 외부 신호들의 주파수를 점점 낮추고 내부 주파수를 대신 올리게됩니다.
그래서 메모리와 같이 고속으로 억세스가 되는 부분은 칩 안으로 들어간 MCU가 노이즈나 전력 소모면에서
상당한 잇점을 갖고 있습니다. (물론 면적이나 가격에 대한 잇점도 동반합니다.)
외부에 버스를 빼게 되면, 해당 패드는 내부 bus clock과 같이 움직여야하기 때문에 상당히 많은 에너지를
소모합니다. 더구나, 실행을 위해 매번 fetch/load/store를 하여야하는 메모리라면 버스 PAD에 의해
소모되는 에너지 비중이 실로 엄청납니다.
더군다나, 내부 PLL없이 외부 크리스탈로 발진을 해야한다면, 그 칩의 가장 높은 주파수가
XIN/XOUT의 Oscillation pad에서 생겨난다는 것입니다.
이전에는 특이한 경우를 제외하고는 Oscillation pad가 가장 큰 인버터였습니다.
Oscillation pad는 한마디로 AMP입니다. Comparator AMP이지요.
XTAL의 미약한 feedback에 대해 증폭을 해야하며, 수십MHz가 넘을 경우 스위칭 속도도 빨라야하기 때문에
상당히 큰 invertor가 들어갑니다.
이로 인해 소모되는 전류도 상당합니다.
<크리스탈 발진 회로의 예: 인버터 또는 인버터 + R이 IC에 내장됨>
(Image 출처: http://www2.renesas.com/faq/en/f_tech.html)
예전에 50MHz에 대한 전류소모를 측정한 결과로는 5mA 정도가 clock pad에서 소모되더군요.
주파수가 1MHz만 되더라도 1mA 이하로 떨어집니다.
이러한 문제 때문에 요즘 점차 clock을 내장하게 되었으며, 정밀한 클럭을 써야하는 경우도,
외부에 낮은 주파수를 사용하고, 내부에 PLL을 두어 주파수를 올리는 방법을 사용합니다.
이로인해 외부로 나가는 PAD에 의한 전류 손실을 상당부분 막을 수 있게 되었습니다.
두군다나, oscillation pad 자체도 상당히 적은 전류를 소모하게되어, 이로인한 전류 소모량을 극소화 하였습니다.
이로인해 application engineer는 점점 불리한 환경으로 몰리게되었습니다.
이젠 low-leakage의 계측기를 사용하지 않는 이상은 찍으면 파형이 없어지므로 확인이 불가능해 진 것이지요.
물론 클럭에 관한 것입니다.
또한 STM에서나온 CorTex MCU의 경우는 모든 핀의 주파수를 지정할 수 있게 하였습니다.
이것이 무슨 의미냐면, GPIO를 소비전류에 맞게 customizing한다는 것이지요.
굳이 빠르게 스위칭 할 필요가 없는 PAD는 전류를 적게 소모하게 바꾸고, 빨리 스위칭 하는 PAD는
전류를 많이 소모하도록 한다는 것입니다.
그리고 TI Luminary MCU에서는 Output PAD의drive strength를 2mA,4mA,8mA 그리고 slew rate control 등을
지정할 수 있게 되어 있습니다.
이것도, 불필요한 스위칭 파워를 줄이는 방법이지요. 원래는 설계지 PAD drive strength를 어느정도로 할 지
정합니다만, 이칩은 아예 S/W로 지정하도록 해놓았더군요.
전력 소모를 줄이기 위한 상당히 유용한 아이디어인 것 같습니다.
(물론 이로인해 개발자는 설정해야하는 것이 더 늘어났고, 경우에 따라 에러 발생의 소지도 생겼지요)
결국 이러한 모든 것이 최근 화두가 되고있는 Energy Efficiency와 결부된다는 것입니다.
이제 Application Engineer는 Function, Quality 뿐만아니라 Environmental issue에 대응 해야한다는 것이군요.
개발자에게 있어서는 점점 자기가 할 수 있는 범위보다 새로이 나타나는 기술들이 점차 빠르게 늘어남에 따라,
점점 스코프를 줄여서 전문화 해 갈 수 밖에 없을 것 같습니다.
저도 20년 넘게 이쪽 분야에서 다양한 업무를 하였습니다만, 넘쳐나는 신기술로 인해 충분히 경험해 보지 못하고
넘어가는 경우는 물론이고, 접해 보지도 못한 채 넘어가는 기술들이 너무나 많습니다.
하지만 적어도 Senior Engineer에게 있어서는 새로운 동향을 재빠르게 catch-up하고 나아가서 예측할 수 있어야 겠지요.
그러면서 점점 Marketing에 관심이 가게 되는 것 같습니다.
이것이 어쩔 수 없는 우리나라의 엔지니어들의 career path인지 모르겠습니다.