: #define MCS1_H_RDFxxxxx ( 10 << ( 3+16))//read assert about 180ns+10ns for 200MHz
: #define MCS1_H_RDNxxxxx ( 10 << ( 8+16))//write assert about 230ns+10ns for 200MHz
: #define MCS1_H_RRRxxx ( 2 << (13+16))// CS가닫히고 다음 CS가 열릴 시간 20ns*2
: 어떻게 이런 값이 정해 졌는지요. datasheet를 봐도 잘 모르겠습니다.?

오른쪽의 주석은 조금 잘못된것이죠 ^^
왼쪽에 대한 설명인데 저희가 정확히 옮겨 적지 않아서 그렇습니다.
저희 홈페잊 강좌에서 메모리 컨트롤러쪽을 참조하시기 바랍니다.
일단 위 내용은 이렇게 바뀌어야 합니다.

: #define MCS1_H_RDFxxxxx ( 10 << ( 3+16))//read assert about 100ns+10ns for 200MHz
: #define MCS1_H_RDNxxxxx ( 10 << ( 8+16))//write assert about 100ns+10ns for 200MHz
: #define MCS1_H_RRRxxx ( 2 << (13+16))// CS가닫히고 다음 CS가 열릴 시간 20ns*2

어떤 장치가 느린지 어떻게 알수 있나요?

각 장치를 따로 연결합니다.
그리고 각각의 장치에 메모리 억세스 시간을 최대로 합니다.
위에서 31이 최고 큰 값입니다.
만약 이 값을 넘는 것이라면 RDY를 사용하는 디바이스가 됩니다.
이때는 조금 다른 이야기가 됩니다.

31이면 대충 310nSEC의 접근 시간을 가지게 됩니다.

그리고 이값을 조금씩 줄여 갑니다.
그래서 제대로 동작되는 최소값을 기록합니다.

이것이 이 장치의 적절한 접근 값이 됩니다.

원칙적으로는 각 장치의 정확한 스펙에서 구해야 하지만
저희는 주로 위 방법을 선호 합니다.

이렇게 구한 장비들의 각 설정 값중
같은 CS에 묶인 장비들중에서 가장 큰값을 사용하는 것입니다.

만약 같은 CS에 RDY 신호를 쓰고 있는 것이 있고 않 쓰고 있는 것이 있다면
당연히 이럴때는 CS를 분리해서 사용해야 합니다.