[W7500P] 디버거 리셋시 SSP 초기화 여부

개발환경

  • MCU : W7500P
  • IDE : EWIAR ARM 8.32.1
  • DGB TOOL : J-LINK (SWD)

SSP0와 SSP1을 모두 MASTER MODE로 사용하고 있으며 SSP1에 3가지 device가 물려 있는 환경입니다.

3 디바이스는 25AA02E48, MAX31855, ADS1247 이며 클럭 주파수 375kHz 입니다.
25AA02E48은 클럭 극성이 반대이므로 74LVC1G04GV 인버터를 거쳐 클럭이 전달됩니다.

J-LINK 디버거로 F/W 하는 경우 간헐적으로 SSP1 DR이 1바이트 밀리는 증상이 있어 문의드립니다.

해당 증상이 발생할 때 EEPROM은 읽기 명령에서 1바이트가 밀려서 읽어지고 MAX31855의 경우 SI 핀 없이 클럭만 입력하여 수신한 경우에도 1바이트가 밀려서 읽어집니다.

이와 관련하여 SSP 에 문제가 있는 것으로 판단되어

  1. IAR - JLINK로 프로그램 다운로드시 SSP 리셋이 되는지 여부
  2. SSP만 강제로 리셋을 시킬 수 있는지 여부
  3. MCU 리셋이 발생하더라도 SSP DR이 1바이트 밀리지 않게 할 수 있는지 여부

문의드립니다.

안녕하세요~

답변이 늦어져 죄송합니다.
질문 하신 부분에 답변다는 형태로 진행하겠습니다.

  1. IAR - JLINK로 프로그램 다운로드시 SSP 리셋이 되는지 여부

JLINK말고, CMSIS-DAP을 이용하여 firmware를 다운 받아서 사용 해도 SSP가 리셋이 되는건지 확인부탁드립니다.
JLINK자체에서 그런 현상이 있을수 있는것이기 때문에, W7500P의 문제는 아니라고 보여집니다.

  1. SSP만 강제로 리셋을 시킬 수 있는지 여부
    ->SSPx_CR1 레지스터에서 bit’1’이 SSP를 Disable하는 역할을 하는 bit입니다.
    저희가 제공해드리는 라이브러리를 쓰신다면, SSP_DeInit()함수를 사용하시면됩니다.
    image
    단순히 SSP의 Reset이라면, 위에서 명시했듯이 SSPx_CR의 bit "1’에 값 '0’을 주게 되면 reset이 됩니다.
    image
  2. MCU 리셋이 발생하더라도 SSP DR이 1바이트 밀리지 않게 할 수 있는지 여부
    해당부분은 어떻게 동작이 되는지, 파형으로 볼수 있을까요?
    MCU가 리셋이 된다면, 1바이트가 밀리는것이 아니라, 시스템 전체가 리셋이 되는겁니다.

감사합니다.
irina

CMSIS-DAP는 없어서 확인해보지 못했습니다.

  1. 디버거로 SW RST시에 코어만 리셋되고 SSP 리셋이 발생하지 않음을 의심하고 있어
    문의를 드렸던 것입니다.

    지금은 일단 SSP 초기화하고나면 무조건 FIFO를 검사해서 버퍼를 비우도록 한 뒤로는
    그런 일이 안 생기고 있는데 제가 하고 있는 의심이 맞는지 확인 부탁드립니다.

  2. 만약 SSP가 코어와 함께 초기화된다면 SSP가 초기화 되었을 때 SSP-FIFO가 완전히 초기화 되지 않는 것은 아닌가 하는 의문도 듭니다.

문제는 유독 DR을 읽어올 때만 발생하고 있다는 점입니다.

DR에 쓸 때는 밀림 없이 발행하는데 DR을 읽으면 DR에 썼던 데이터가 1바이트 읽어지고 난 후에 그 다음부터 원래 읽어야 할 데이터가 읽어집니다.

항상 이런 문제가 생기는 것도 아니고 SWD로 F/W 다운로드할 때 간혹 이런 문제가 생깁니다.

안녕하세요 해당 게시글을 한국어포럼으로 이동하였습니다.

한국어 포럼에서 10일 동안 아무런 답변이 없다가 영문 포럼으로 옮기고 2일만에 답변을 받았습니다.

유선 문의도 안 받고 포럼 답변만 하는 상황에서 이건 좀 아닌거 같군요.
그렇다고 DATASHEET가 잘 만들어져 있어서 유선문의가 필요없는 경우도 아니고요.

이런 일을 겪고 나니 차라리 쓰지 말까 하는 생각도 듭니다.
다른 문제로 인해 납품이 몇일 전부터 있었는데 계속 미뤄지고 있습니다.
WIZNET 제품은 어떻게 믿고 개발하고 사용할 수 있는건가요?

답변속도에 영문과 한국어 포럼에 차이는 없습니다.
앞으로 더욱 신경쓰도록 하겠습니다. 죄송합니다.

안녕하세요,

  1. SW RST을 할경우 SSP DeInit()함수를 사용하게 되면, SSP는 Reset이 걸리게 됩니다.
  2. 또한, SSP가 Reset이 된다면 해당 FIFO은 초기화가 됩니다.

우선 데이터가 밀린다고하셨는데, 가능하시면 오실로스코프로 확인 가능하시면 해당 부분을 보내주시면 가장 빠르게 해결될것 같습니다.

  1. SPI Clock이 다른 slave는 제외하고 테스트 해보시는걸 추천드립니다.
  2. 하나의 Slave가 동작한 다음 일정시간 이 지난 다음 다른 Slave을 동작시키시길 바랍니다.

한가지더 궁금한것은 F/W 다운로드 후 에는 이러한현상이 없는건가요? f/w 다운로드한 직전에만 일어나는 현상인가요?

감사합니다.
irina

F/W 다운로드 후에 간헐적으로 나타나는 현상으로 Power On Reset에서는 한 번도 겪은 바 없습니다.

SSP Deinit() 함수는 사용한 적 없습니다.

안녕하세요~

F/W다운로드한 후 밀렸다고 하셨는데,
이부분은 Uart를 통해서 확인하신건지, 아니면, debug사용하셔서 보시는 memory값으로 보시는건가요?
후자의 경우에는 실제 밀리는 경우가 아닐수 있습니다.
debug로 보는 값은 밀려서 보이는 경우가 있으니, Uart를 통해서 확인하는 방법을 추천 드립니다.

감사합니다.
irina