비휘발 MRAM도 전원 떨어질 때 쓰기를 막아야 한다
MRAM은 전원이 꺼져도 데이터를 보존한다. 그렇다면 전압이 떨어지는 순간에 쓰기 보호를 신경 쓸 필요도 없을까? MRAM Brownout Inhibit는 저장 상태의 보존과 불안정한 전원에서 들어오는 명령을 따로 다룬다. 데이터를 오래 남기는 메모리는 잘못된 쓰기도 오래 남길 수 있다.
문제는 셀만이 아니다. 전원 하강 중에 MCU와 메모리가 서로 다른 시점에 정상 동작 범위를 벗어나면 주소나 control 신호가 의도한 상태를 유지하지 못할 수 있다. 정상적인 쓰기였는지 판단할 정보 자체가 흔들린다.
낮은 전압에서 쓰기를 막는 조건
Everspin MR4A16B의 Rev.11.7 문서는 VDD가 VWI보다 낮을 때 쓰기를 보호한다고 명시한다. VWI는 write inhibit voltage다. 정상 공급 전압 범위는 3.0–3.6V이며, VWI 표에는 최소 2.5V, typical 2.7V, 최대 3.0V가 나온다. typical 2.7V 하나를 모든 부품의 정확한 전환점으로 읽으면 안 된다. MR4A16B 원문 p.5, Table 2.2
이 기능은 저전압 조건의 쓰기를 차단하는 것이다. 전압이 정상 범위로 돌아오기 전에 read와 write가 모두 정상 동작한다는 보장은 아니다. 정상 동작 최소값과 쓰기 차단 임계값은 서로 다른 조건이다.
전원 복귀에는 시간 조건도 있다. 문서는 VDD가 정상 최소값을 넘은 뒤 2ms의 startup 시간을 지켜야 read나 write를 시작할 수 있다고 설명한다. brownout으로 VWI 아래에 내려갔다가 돌아올 때도 recovery 시간이 필요하다. 비휘발 저장이라는 특성이 전원 안정화 대기를 없애지는 않는다.
내부 차단이 모든 잘못된 pulse를 막지는 않는다
가상의 보드에서 MRAM 공급이 3.3V에서 내려가고, MCU는 3.1V 부근에서 control 출력을 안정적으로 유지하지 못한다고 하자. 이 MCU 조건은 설명용이다. 특정 MRAM sample의 VWI는 2.7V라고 가정한다.
3.1V에서는 메모리 공급이 아직 정상 범위에 있고 내부 inhibit도 걸리지 않았다. 이때 MCU가 주소를 잘못 내거나 chip enable E와 write enable W를 동시에 active로 만들면, 의도하지 않은 주소에 쓰기 조건이 생길 수 있다. VDD가 2.7V 아래로 내려가서 차단되더라도 그전에 생긴 일을 거꾸로 취소해 주지는 않는다.
3.0V 아래와 VWI 위의 구간도 정상 작동으로 가정해서는 안 된다. 이미 공급이 datasheet의 정상 범위를 벗어났기 때문이다. 그 구간에서 “아직 inhibit 전이니 정상적으로 쓸 수 있다”는 논리는 틀리다. 시스템은 장치마다 다른 전원 조건을 포함해 control을 안정하게 유지해야 한다.
이 예에서 필요한 보호는 메모리 내부 inhibit와 host 쪽 write 허용 조건의 연결이다. host가 불안정해질 때 쓰기 신호를 inactive로 유지하면, 메모리가 아직 작동 가능한 동안 들어올 수 있는 잘못된 명령을 줄일 수 있다.
전원 복귀에서 먼저 풀지 말아야 할 신호
원문은 E와 W가 전원 상승 중 VDD를 따라 high 상태를 유지하고 startup 동안 high로 남아야 한다고 설명한다. high 목표 조건은 VDD−0.2V와 VIH 중 낮은 값이다. 구동 회로가 Hi-Z일 때도 신호가 high로 유지되도록 pull-up을 사용하는 예도 제시한다. 원문 p.5, Power Up and Power Down Sequencing
가령 전원 복귀 파형이 시간 5ms에 3.0V를 넘었다면, 그 시점부터 2ms를 기다린 7ms 이후가 문서의 startup 시간 조건을 만족하는 경계다. 전체 시스템의 reset 해제가 5.2ms라고 해서 메모리 접근까지 바로 풀 수는 없다. 여기서는 전압이 이후 정상 범위에 안정적으로 머문다고 가정했다.
전압이 다시 떨어지면 이 조건을 새로 확인해야 한다. 짧은 brownout을 단순한 CPU reset으로만 처리하고 메모리 접근 허용을 계속 열어 두면, 메모리가 요구한 recovery 시간을 놓칠 수 있다. 전원 파형에서 어느 threshold를 기준으로 시간을 시작했는지 분명해야 한다.
pull-up만으로 모든 상황이 해결되는 것도 아니다. controller가 적극적으로 low를 구동하는 경우, 전원 domain이 서로 다른 경우와 입력 전압 제한은 별도로 확인해야 한다. 쓰기 control을 inactive로 유지하는 방법은 실제 보드의 신호 구동 구조에 맞아야 한다.
보호 뒤에도 transaction 판단은 남는다
brownout을 만났다는 사실이 최근 쓰기가 모두 성공했다는 뜻도, 모두 실패했다는 뜻도 아니다. 정상 조건에서 이미 완료된 쓰기와 전압 하강 중 진행되던 쓰기의 유효성을 구별해야 한다. 전원 감지와 inhibit가 긴 데이터 구조 전체를 원자적으로 갱신해 주지는 않는다.
따라서 기록 순서와 완료 표시, 복귀 뒤의 데이터 검증이 여전히 필요하다. 원하지 않는 쓰기를 차단하는 회로 조건과, 중간에 멈춘 갱신을 알아보는 저장 형식은 서로 다른 문제를 해결한다.
MRAM Brownout Inhibit의 의미는 전원 없는 보존에 예외를 붙이는 데 있지 않다. 보존 가능한 셀에 불안정한 명령이 들어가지 않도록 작동 조건을 지키는 데 있다. 실제 threshold 범위, startup 시간과 E·W의 상태를 같은 전원 파형에 놓으면, 내부 보호가 담당하는 구간과 시스템이 책임져야 할 구간을 확인할 수 있다.