본문 바로가기
자동차 임베디드 SW/툴 관련

Flash write,erase시 유의사항!!!

by 존버매니아.임베디드 개발자 2023. 2. 9.
반응형

T32의 기능 중에
Var.watch 또는 Memory dump 기능이 있는데
이 기능들은 모두 mcu의 현재 메모리값을 유저에게 보여주는 역할을 한다.

한편, 부트로더 등을 사용하여 MCU의 Flash를 write하거나 erase를 하는 경우가 있는데, 이때 만약 T32를 연결해놓은 상태라면 위 기능들로 인해 문제가 생길 수 있다.

flash 명령을 수행하는 메모리 영역과 var.watch 또는 dump 기능에서 접근하는 메모리영역이 겹치면 이로 인해 모종의 문제가 발생하여 flash write , erase 도중 런타임 에러가 발생하여 mcu reset이 일어나거나 mcu의 동작이 이상해질 수 있다.

그러므로, T32 연결 상태에서 sw가 flash write, read,erase 등을 할 때는
dump 기능이나 var watch 기능을 사용하지 않거나, 사용하더라도 메모리 영역이 겹치지 않는 부분만 보거나
아니면 dual port 기능을 off 하여 T32가 메모리에 접근하는 것을 막아놓은 상태로 사용해야한다.

참고로, 이게 굉장히 곤란한게 dump를 켜놨다고 무조건 에러 생기는게 아니라 t32가 메모리 읽는동작과 sw가 접근하는거랑 타이밍이 맞으면 맛이 가기 때문에 동작이 될 때도 있고 안될때도 있다.

모호함 방지를 위해 확실히 꺼놓자.


위랑 비슷한 얘기인데,
sw가 flash read write를 하는 도중 sw가 다른 코드 실행을 위해 flash에 접근을 하면 문제가 발생할 수 있다.
한편 sw를 빌드 할 때 ram copy라는 옵션이 있는데 이걸 사용하면 원래 flash에서 실행되야 할 함수를 init 과정에서 ram에 올려놓고 사용하게 된다.

이 경우, 해당 함수는 ram에서 실행되기 때문에 flash 명령 수행 도중에 해당 함수를 실행해도 문제가 없을 것이다.

근데 빌드 할 때 최적화 옵션에 따라 이 ram copy가 적용이 안되는 경우가 있다.
그러면 유저 입장에서는 해당 함수가 ram에서 호출되는걸로 알고있는데 실제로는 flash에서 실행되므로 문제 될 수 있다.
혹시 flash 명령 수행 중 원인 불명의 문제가 발생하면 의심해보자.

반응형