MCU가 자기보다 느린 메모리 장치를 다룰 때 Wait State라는 방법을 써요.
뭐, 예를 들면, Clock에 따라서 MCU가 특정 주소를 Access하여 값을 읽기 위해 Address Bus에 신호를 흘려준 후, RD/를 Low로 구동시킨 후에, Data line의 값을 읽어 들이죠. 이때 Timing만 보면, RD/를 구동시킨 후에 일정 시간이 지나야 제대로 된 Data 값을 돌려준다고 가정하고 그 시간이 지난 후에야 Data를 읽어 들이기 시작합니다요. 제대로 된 값을 돌려주기로 기대되는 시간이 Wait State라고 불리는 구간이고요. 보통 Clock에 대비하여 몇 Clock후에 제대로 된 Data가 나온다~ 하는 Device Specification이 있답니다. Wait State때문에 빠른 CPU가 느린 외부장치와 통신할 때 쉬는 시간이 늘어 나는 경향이 있지만 뭐 어쩔 수 있겠습니까. 손발이 느린 것을.
어쨌든 간에 이런 Wait State를 제대로 설정해 주지 못하면 엉뚱한 순간에 Data값이라고 생각하고 Data를 채오기 때문에 (Caputure라고 부르기도 하죠) 문제 발생의 소지가 있습니다요. 보통 처음 Power up이 되자 마자, 보통 최대 개수의 Wait 상태를 기다리고요. Device Configuration을 시작하면 이 Wait state를 Setting하곤 하죠. 이 Wait State는 Register를 이용해서 설정할 수 있는데, 최소 Wait State를 잘 맞추어서 설정을 해주어야 Memory가 최대 Performance를 낼 수 있어요. Wait State는 CPU clock을 몇 번 기다려야 하느냐의 말이고, 이건 정수 값을 가질 테죠.
가타부타 복잡하니까, 예부터 진입. 예는 NOR Memory를 들어 보겠사옵니다. 관심사항으로는 사용하려는 Memory가 얼마나 느린지 확인하여, Memory Controller에게 얼마나 Wait State를 가져야 되는지를 알려주는 작업이니까, 그림을 조금만 따라와 주세요.
이건 어떤 NOR Memory의 Device Spec의 일부에요.
가만히 들여다 보면 우리가 관심 가져야 할 부분은 tCE라고 표시된 부분이에요. Chip Enable이 되고 나서 얼마 후에 제대로 된 Data가 흘러나오는지에 관한 얘기거든요. 요 부분에 대해서 Device Spec을 더 자세히 보면,
tCE는 Min 80nS라고 되어 있죠. 80nS 후에는 Data가 확실하게 나온다는 얘기지요. 이쯤 되면~ 우리가 사용할 MCU의 Device Spe을 한번 살펴 볼까요? 양쪽 Spec을 다 봐야 하니 눈이 띠옹.
그림 중에 보면 CS_N이 내려가고 나서 Data를 채 갈 수 있는 시간 까지가 tACSDV라고 표시되어 있지요. 요게 우리가 관심 가져야 하는 Timing이겠네요. Spec을 더 자세히 보면,
tACSDV는 (T-21) + WT 라고 되어 있죠. 그런 거에요. 우리는 최소한 80nS를 기다려야 하고 그건 (T-21)+WT가 최소한 80nS가 되어야 한다는 말인 게죠. T는 CPU Clock 주파수의 주기이고요, 여기에서 만일 우리의 System이 50MHz짜리 System이다.. 치면 T = 1/40MHz = 0.25*10^-7 = 25*10^-9 = 25nS 이고요.
여기에 근거해서
(T-21) + WT > 80nS 인 것을 만족해야 해요.
그러니까
(25-21) + W*25 > 80
W*25 > 80-4
W*25 > 76
인 셈이죠. 여기에서 Wait State라는 건 정수여야 하는 거고요. 그러니까 W가 3인 경우에도 fail, W가 4인 경우에는 pass가 되겠네요. 아슬아슬하게도. 참내. 이런 경우에 Wait State (W) = 4이라는 얘기는 4개의 Main clock을 기다려야 한다는 말이랑 똑같아요.
이런 억울한 경우라면 차라리 Wait State가 75nS짜리를 사용하게 되면,
(T-21) + WT > 75nS 인 것을 만족하면 되니까.
(25-21) + W*25 > 75
W*25 >7 5-4
W*25 > 71 → W= 3
이러면 5nS 차이인데, Wait State는 1 MCU Clock이 줄어 들었어요. 훨씬 성능이 좋아지겠죠. 25nS씩 더 잡아 먹던걸 덜 잡아먹게 했으니까요. 여기서는 한가지 예만 들었는데, Table보면 다른 것도 많이 있죠. 이런 거 다 따져 보고서 Wait State를 결정해 줘야 해요. Control하는 방법은 MCU의 Memory Controller 쪽 Register나, Bus Sizer Register들을 찾아보면 이런 값을 설정해 줘야 하는 부분이 있으니까 잊지 말고 꼭 해주세요!
![](https://tistory1.daumcdn.net/tistory/6281347/skin/images/myface_recipes.jpg)
![](https://tistory1.daumcdn.net/tistory/6281347/skin/images/click15x15.png)
댓글