본문 바로가기
자동차 임베디드 SW/Aurix MCU

Aurix Swap flash 이슈

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

메모리 스왑 기능을 쓰는 상황일 때.
FLASH 커맨드를 통해 flash write/erase/verify 등을 한다면 이때 target address는 물리 주소값을 적어야한다.
flash 커맨드에서 아규먼트로 전달되는 주소값은 swap이 자동 적용 되지않는다.

쉽게 말해서 Flash Erase 명령을 날린다고 할 때.
예를 들어 내가 실제 메모리 주소 0x8060 0000 영역을 지우고싶은 상황일 떄.
이 때 만약 B Bank가 활성화된 상태라고 가정하면.
단순히 0x8060 0000 영역의 값을 읽고(read) 싶은 상황이라면, 현재 B Bank가 활성화된 상태니까
unint32 test_data = (uint32*)(*(0x8000 0000));  이런식으로 읽어야 8060 0000 으로 읽힐 것이다.
 
근데 Read가 아니라 Erase를 하는 경우라면, 현재 A뱅크이든 B bank이든 상관없이. Flash Erase Command에 적용되는 주소값은 실제 메모리 물리 주소값이므로.
뱅크랑 상관없이 내가 지우고싶은 0x8060 0000 이라고 적어서 지워야된다는 소리다.


또 한가지 유의사항은 T32에서 dump 기능을 쓸때.
메모리스왑 기능을 사용하는 경우. t32 상에서 보여지는 주소는 물리주소 값이 아니라 스왑이 적용된 상태이다!

즉, swap이 켜져있고 현재 B 뱅크가 활성화된 상태에서 t32 dump로 0xA000 0000 영역을 읽는다면,
dump 상에 보여지는 메모리의  주소값은 뱅크가 적용된 주소 로 해석해야한다.
즉. T32 Dump 상에 0x8000 0000 이라고 쓰여있을때.
거기에 보여지는 내용은 실제 물리 메모리주소 0x8060 0000 영역의 값을 보여주고 있다는 것이다.
 
아래 예시)

반응형