Microchip SST26VF064B 직렬 플래시 통신 문제-잘못된 JEDEC ID
Microchip SST26VF064B 직렬 플래시로 SPI 통신을 테스트하려고하는데 칩에서 JEDEC ID를 읽는 동안 문제가 발생했습니다. 데이터 시트에 따르면 처음 3 바이트는 0xBF, 0x26, 0x41 / 0x42 여야합니다. 0x7C, 0x20, 0x7F와 같이 완전히 다른 데이터를 얻습니다. 칩은 JEDEC ID 명령 0x9F 읽기에 응답하는 것처럼 보이지만 항상 동일한 예상치 못한 데이터를 보냅니다.

나는 SOC 용 SDK와 함께 제공되는 SPI 드라이버를 사용해 보았고, 또한 간단한 비트 뱅잉 SPI-결과가 동일하므로 SPI 통신이 정상적으로 작동한다고 생각합니다. 다음에 무엇을 시도해야할지 아이디어가 부족합니다 ... 예상 ID 대신이 데이터를 얻을 수있는 이유가 있습니까?

답변
이것은 부분적으로 클럭킹과 관련된 복잡한 문제였으며 MISO 라인에 직렬 저항이없는 것 같습니다. MISO에 100ohm 저항을 추가하고 nRF52840 SOC SCLK 라인을 "하이 드라이브"로 설정 한 후 문제가 마침내 해결되어 클럭 에지가 더 빨리 떨어지거나 올라갑니다.
내 문제는 현재 상당히 긴 점퍼 와이어 (10-15cm)가있는 브레드 보드에서 작업하고 있다는 사실과 관련이 있다고 생각합니다. 모든 프로젝트와 마찬가지로, 회로 / PCB에 통합하기 전에 알려지지 않은 모든 구성 요소를 테스트하려고합니다. 물론 브레드 보드는 자체 문제를 일으킬 수 있으며 여기에서 발생할 수 있습니다.하지만 여전히 몇 가지 다른 SPI 칩으로 작업 한 적이 있으며 이전에 버스에서 신호의 비정상적인 동작을 경험 한 적이 없습니다.
-첫 번째 문제 : 슬레이브가 MISO에서 무언가를 출력하고 있지만 출력 데이터가 예기치 않거나 잘못되었습니다. 원래 질문에 오실로스코프 화면을 포함 시켰고 두 번째 질문을 확장하면 MISO에서 발생하는 작은 스파이크를 볼 수 있습니다. 이 스파이크를 조사한 결과 슬레이브가 다음 비트를 이동해야 할 때 클럭 에지가 떨어질 때 항상 발생하는 것 같습니다.
노란색-CS, 파란색-시계, 보라색-MISO (이 화면에서는 MOSI가 제외됨)

상단 화면에서 슬레이브가 클럭 에지 하강을 감지하고 MISO가 높아지기 시작하는 것을 볼 수 있습니다 (읽은 바이트의 일부 비트가 1과 같음).하지만 클럭 에지가 더 느리게 떨어지면 슬레이브가 혼란스러워지고 MISO도 종료됩니다. 그것이 적절한 논리 H 레벨에 도달하기 전에 (적어도 여기서 일어나는 일에 대한 나의 이해입니다). 둘째, 아래 화면은 비교를위한 것입니다. nRF52840 SOC의 "하이 드라이브"기능이 SCLK 핀에서 활성화되면 클럭 에지가 더 빨리 떨어지고 MISO가이 설정으로 올바르게 작동합니다. 칩이 예상 데이터를 출력합니다.
-두 번째 문제 : 연결되지 않은 상태에서 MISO 신호는 정상입니다. 마스터에 연결 한 후 MISO 신호는 마스터가 읽을 수없는 지점까지 왜곡되거나 MISO 신호가 전혀 없습니다.
아래는 적절한 동작입니다 (MISO에서 100ohm 저항, SCLK에서 하이 드라이브 활성화)-이것은 원래 질문과는 다른 플래시 칩입니다-Micron MT25QL128ABA로 변경했지만 정확히 동일하게 작동했습니다. MISO에 연결된 마스터로 프로브됩니다. 노란색-CS, 파란색-시계, 보라색-MISO. MOSI는이 화면에서 제외됩니다.

아래는 저항이없는 동작입니다. MISO 신호가 전혀 없습니다. MISO에 연결된 마스터로 프로브됩니다. 노란색-CS, 파란색-시계, 보라색-MISO. MOSI는이 화면에서 제외됩니다.

비슷한 MISO 문제를 설명하는 Nordic 포럼에서 여러 스레드를 찾았습니다. https://devzone.nordicsemi.com/f/nordic-q-a/47335/problem-using-digital-io-as-miso https://devzone.nordicsemi.com/f/nordic-q-a/47968/spi-doesn-t-work-in-nrf52810-while-emulating-nrf52810-in-nrf52832dk-was-successful/190230#190230
이것이 MISO에 사용되는 SOC 핀의 버그 또는 잘못된 구성인지 또는 테스트 회로의 긴 SPI 버스 와이어와 관련이 있는지 확실하지 않습니다. 내가 읽은 것에서-저항은 SPI 버스에서 와이어 / 트레이스가 길 때 수신기와 전송기의 임피던스를 일치시키는 데 사용할 수 있습니다 (그러나 이러한 문제를 일으킬 수있을만큼 길이가 10cm입니까?). 사실 MISO의 상대적으로 작은 값의 저항이 여기에 도움이됩니다. 정확히 왜 그런지 알고 싶지만 확실한 저수준 지식이 부족합니다. PCB의 MISO에 저항을 통합하지만 먼저 0R 값으로 테스트하여 PCB의 더 나은 조건 (짧은 트레이스)이 추가 저항없이이 작업을 수행하는지 확인합니다.