강좌 & 팁
글 수 2,412
2015.07.20 23:16:49 (*.216.64.90)
62872
가만히 생각해 보면 당연한 얘기인데도 막상 당해 보면
그다지 떠올려 지지 않는 문제를 겪게 됩니다.
arm core 를 보면 L1, L2 캐쉬들이 있습니다.
많이 들어 보셨죠?
그런데 드라이버를 짜다 보면 DMA 전송이 낄 경우 참 다양한 문제들을 만들어 냅니다.
먼저 난 분명 전송을 다했는데 불구하고 데이타의 checksum 이 틀리다고 나오거나.
혹은 데이타가 다 맞다고 나오는데 다른 프로세서에서 읽어 보면 데이타가 틀리거나...
이런 경우를 겪기도 어렵겠지만 찾아내기도 참 어렵습니다.
이번에 보드 디버깅을 하면서 L2 cache 를 켜 놓고 DMA 를 동작시키는 불상사를 저질렀습니다.
하지만 L2 cache 에 대한 처리를 하지 않았죠.
운 좋을 때는 잘 동작하고 더군다나 checksum 이 맞기도 합니다!!!
하지만 다른 프로세서에서 읽게 되면 뭐가 살짝 데이타가 맛탱이가 간 상태더군요?
한줄 요약을 하면
DMA 사용할때는 시스템에 존재하는 cache 에 대한 처리를 함께 해주어야 한다!!!
이 한줄이 이틀을 버린고 얻은 교훈입니다