WIZnet Developer Forum

[W7500P SPI] 클럭과 Data의 동기문제

[W7500P] 를 이용하여 DAC8551(TI)를 제어하고자 합니다.

SSP 설정은 문제가 없어 보이는데, 출력되는 Clock이 24ea여야 하는데 25ea가 나옵니다.
그리고, 1 clock이 존재하다 보니 dac쪽 data를 정상적으로 최대까지 출력할수가 없습니다.
참고로, SSEL은 W7500P Port에서 바로 결선되어있고, SCLK와 DATA는 Level 변환 IC를 중간에 배치했습니다.
첨부 이미지의 첫번째 클럭에서 볼때 data의 low부분이 첫번째 클럭과 일치해야하는데…
지금은 그렇지 못합니다.
================ 현재 설정된 ssp // only master mode =============
SSP_StructInit(&SSP1_InitStructure);
SSP1_InitStructure.SSP_FrameFormat = SSP_FrameFormat_TI;
SSP1_InitStructure.SSP_DataSize = SSP_DataSize_8b;
SSP_Init(SSP1,&SSP1_InitStructure);

=================현재 w75xx_ssp.c =============================
/* Initialize the SSP_SerialClockRate member /
SSP_InitStruct->SSP_SerialClockRate = 0x00;
/
initialize the SSP_FrameFormat member /
SSP_InitStruct->SSP_FrameFormat = SSP_FrameFormat_TI;
/
Initialize the SSP_CPHA member /
SSP_InitStruct->SSP_CPHA = SSP_CPHA_1Edge;
/
Initialize the SSP_CPOL member /
SSP_InitStruct->SSP_CPOL = SSP_CPOL_Low;
/
initialize the SSP_DataSize member /
SSP_InitStruct->SSP_DataSize = SSP_DataSize_8b;
/
Initialize the SSP_SerialOutputDisable member /
SSP_InitStruct->SSP_SOD = SSP_SOD_RESET;
/
initialize the SSP_Mode member /
SSP_InitStruct->SSP_Mode = SSP_Mode_Master;
/
Initialize the SSP_NSS member /
SSP_InitStruct->SSP_NSS = SSP_NSS_Hard;
/
Initialize the SSP_Synchoronous Serial port member /


SSP_InitStruct->SSP_SSE = SSP_SSE_SET;
/
Initialize the SSP_LoopBackMode member /
SSP_InitStruct->SSP_LBM = SSP_LBM_RESET;
/
Initialize the SSP_BaudRatePrescaler member */
SSP_InitStruct->SSP_BaudRatePrescaler = SSP_BaudRatePrescaler_8;

E-mail로 회신해드렸습니다.
SSP1는 선언 후 데이터를 보내주면 CS는 자동으로 동작하게 되어 있습니다.(SSP Defalut 값 때문에)

uint16_t SSP1_Buffer_Tx[10] = {0x01, 0x03, 0x05, 0x07, 0x09, 0x0B,
                                  0x0D, 0xAA};
  SSP_StructInit(&SSP1_InitStructure);
  SSP1_InitStructure.SSP_FrameFormat  = SSP_FrameFormat_TI; // Motorora SPI mode
  SSP1_InitStructure.SSP_DataSize = SSP_DataSize_8b;
  SSP_Init(SSP1,&SSP1_InitStructure);

  for (uint8_t TxIdx=0; TxIdx<10; TxIdx++)
  {
      SSP_SendData(SSP1, SSP1_Buffer_Tx[TxIdx]);
      while( SSP_GetFlagStatus(SSP1, SSP_FLAG_BSY) );
  }GetFlagStatus(SSP1, SSP_FLAG_BSY) );
      }

scope_4scope_3

Copyright © 2017 WIZnet Co., Ltd. All Rights Reserved.