질문1
저희 예제 소스가 잘못 구현되어있습니다.
실수가 있었던것 같습니다. 추후 수정하도록 하겠습니다.
SPI 최대 Clock는 24MHZ 이며, 20MHz 이하로 사용하는것을 권장드립니다.
Clock 설정은 CR0레지스터의 [15:8] bit(SCR)을 이용해 할 수 있습니다.
CS의 경우는 어떤 SPI 장비와 통신을 할 것인지 선택하는 기능입니다.
따라서 이 것에 의해서 클럭이 지속적으로 발생하지는 않습니다.
(다만, 여러 Slave와 사용할 때는 신경써야 하는 부분입니다)
그리고, 기본적으로 SPI에서 마스터는 데이터 전송이 끝나면 클럭을 내보내지 않습니다.
Transmission may continue for any number of clock cycles. When complete, the master stops toggling the clock signal, and typically deselects the slave. - Wikipedia
제가 보기에는, 저희 예제에 설정되어 있는 모드(모토로라)를 그대로 사용하셔서 발생한 이슈 같습니다.
TI사의 경우, TI만의 포맷을 사용할 수도 있습니다.
직접 문의주실 때, TI사의 제품(ADS1248)을 사용한다고 하셨고,
이 제품에서는 연속된 통신을 할 때, SCLK가 주기적으로 발생해야 한다고 하셨습니다.
따라서 이 경우는 W7500의 SSP 모드를 TI로 변경하셔야 합니다.
TI 포맷과 관련한 W7500에 대한 내용은 W7500 레퍼런스 메뉴얼 p.459의 Figure57, Figure58을 참조해주세요.
추가로, 8bit 단위로 전송할 때에는, 아래와 같이 데이터시트(SSPxDR)에 나와 있는 내용을 주의해주세요.
You must right-justify data when the SSP0 is programmed for a data size that is less than 16 bits. Unused bits at the top are ignored by transmit logic. The receive logic automatically right-justifies.
더불어, 제가 첨부한 이미지와 비교하여 아래 내용에 대해 답변 드리면,
간격의 차이는 CPU클럭과 SPI클럭의 차이로 인해 발생하는 것입니다.
코드가 동작 중에 CPU클럭과 SPI클럭이 각각 얼마나 진행되는지 비교해보시면 바로 이해하시리라 판단됩니다.
데이터와 상관없이 계속 마스터의 클럭이 발생해야한다는 것인가요? (이는 표준 SPI가 아닙니다)
어떤 의도인지는 알 수 없지만, Ti칩에서 데이터시트에 명시되어 있는건가요?
만약 그렇다면, SPI페리가 아닌 일반 GPIO로 클럭을 생성하셔야 합니다.
연속된 데이터에서도 중간에 클럭이 로우로 떨어지는 이유는 모토로라 표준 프로토콜에 의한 것입니다.
정말 Ti칩이 표준 프로토콜을 요구하고 있는 것인지 이를 변형한 내용을 요구하는 것인지에 대해서는 TI측에 문의해서 확실히 하시는게 좋다고 판단됩니다.
후자의 경우는, 표준 모토로라 프로토콜을 사용하는 페리로는 안되므로 사용자가 직접 커스터마이징 해야합니다.
먼저 질문드리고 싶은 것이 있습니다.
이전에 드린 방식으로는 ADS1248과 통신 자체가 안되시는건가요?
일반적인 SPI라면, 클럭의 연속 유무(몇 클럭 차이 수준)에 따라 통신이 안되지는 않습니다.
사용하시는 ADS1248의 요구사항이 다르다면 모르겠지만, 일반적으로는 그러합니다.
모토로라 프로토콜 특성상 각 전송마다 클럭 로우 구간이 발생합니다.
(물론 이는 기본 값이며, SPO와 SPH에 따라 달라집니다)
Cortex M0를 사용한다고 해서 무조건 같은 Peri IP를 사용하지는 않습니다.
따라서 시중의 m0가 올려주신 파형이 나온다고해서 W7500에서 나오는 것은 아닙니다.
ADS1248 방식 자체가 마스터의 커맨드에 의한 요청과 상관없이 클럭만 맞춰주면 데이터를 내보내는 형태인가요?
제가 보기엔, SPI특성에 의한 이슈보다는 ADS1248에 대한 어플리케이션 구현 이슈 같습니다. ADS1248 데이터시트와 위에 링크드린 GitHub코드를 참조하셔서 코드를 작성해보시는게 좋을 것 같습니다.
만약, 어플리케이션 구현을 ADS1248에 맞게 하셨다면,
우선은 Ti사에 구현하신 형태로 통신하는게 맞는지 문의해보시는 것이 좋다고 판단됩니다.
추가로, 그 클럭에 대한 문의를 해보시고, "무조건 연속적으로 발생해야만 통신이 된다."라고 가이드를 해야지만, W7500의 SSP 특성에 대해 더 논의하는게 의미 있을 것 같습니다.