MicroSD 쓰기 방지에 대하여
MicroSD 쓰기 방지에 대하여
요즘 많은 기기들이 이동용 메모리인 SD 카드를 많이 사용한다. 특히나 용량은 크면서 사이즈는 작은 MicroSD 카드를 사용하는 기기들이 더욱 늘어나는 형편이다.
문제는 늘어나는 기기에 대비 MicroSD 카드의 쓰기 방지 오류가 자주 목격된다는 것이다.
SD 카드 시절에는 거의 없었던 쓰기 방지 오류가 왜 MicroSD 에서는 더 많이 목격되는 것인지 생각해보았다.
여기서 부터는 순전히 뇌피셜이다. 가능성을 짚어보고자 상상의 나래를 펼치는 것이니 이 글을 평가하지는 마시길 바란다.
이동/기록용 기기들이 증가하면서 기록 매체의 수요도 늘어났다.
기록 매체의 수요와 함께 기술의 발달로 저장할 수 있는 용량도 날로 늘어가고 있다.
물론 매년 용량은 늘어도 가격은 거의 비슷한 위치를 유지한다.
즉, SD카드 초창기 때 2Gb의 경우 3만원대 또는 그보다 높은 가격으로 구입을 했어야만 했다. 문제는 시기가 지나고 기술이 발달하면서 용량은 늘어가는데 가격은 낮아지고 불량률도 낮아지게 되었다.
불량률이 높아지면 경쟁사에게 밀리고 가격을 높여도 밀리고 끝없는 치킨 게임을 하고 있었던 것이다.
그런데 불량이지만 불량이라고 생각되는 않는 한 가지가 있다. 바로 쓰기 방지 오류이다.
이건 사용자의 취급 부주의로 발생하는 현상이지 제조상의 결함이 아니니 불량으로 생각하지 않는 것이다. 실제로 SD 카드에는 사용자가 데이터 보호를 위한 장치가 달려있다. 하지만 MicroSD 카드에ᅟ는 그런 장치 자체가 없다. 제조사에서는 이 부분을 생각한 것이 아닐까 생각한다.
MicroSD를 사용해보면 쓰기 방지 오류는 사용 초기 보다 데이터 사용량이 높은 기기에서 자주 발생했다.
여기부터는 뇌피셜 즉, '나 같으면 이런 식으로 만들었을 것 이다'라는 개인적인 생각입니다.
결론은 stack overflow와 같은 현상을 이용하는 것이다.
MicroSD 카드에 write counter 또는 read counter를 만들고 매뉴얼에 지정한 숫자와 비슷하게 초기 값을 지정한다. 기기가 동작하면서 이 counter가 증가 된다.
여기서 중요한 한 가지 쓰기 방지 비트를 write counter 앞에 놓는 것이다.
즉,
쓰기 방지 | 쓰기 개수
0x00 | 0x00 0x00
위와 같은 구조로 만들고 쓰기 개수를 늘어나면 0xFF 0xFF가 되고 하나 더 쓰게되면
0x00 | 0xFF 0xFF ==> 0x01 | 0x00 0x00
이런 구조가 되면 손쉽게 쓰기 개수에 따라 쓰기 방지 비트를 활성화 시킬 수 있다.
쓰기 방지가 되면 counter는 더 이상 증가하지 않으니 쓰기 방지는 계속 살아 있게 된다.
포맷을 하면 되는 않느냐는 무식한 생각을 할 수도 있겠지만 포맷으로는 해결이 안된다.
이렇게 하면 카드는 읽히니 불량은 아니라고 말할 수 있으니 소비자에게 욕도 먹지 않고 제품도 더 팔아먹고 일석이조가 되는 것이다. ^^