각종 CHIP/CH341

CH341 칩을 이용해서 UART,I2C,SPI 통신하기 4편(SPI)

원원 2025. 5. 5. 20:08

안녕하세요. CH341 칩을 이용해서 SPI통신을 해보겠습니다. 
3편에서 했던 I2C랑 마찬가지로 CH341DLL을 사용합니다.

* 하드웨어 구성
CH341에서 SPI통신을 해야하므로 1,2번핀을 연결합니다. 1,2번핀을 연결했을때랑 2,3번핀을 연결했을때 다르게 잡히는걸 확인할수있습니다.

1,2번연결
2,3번연결



* 프로그램 구성
SPI 파형을 보기위해 아날라이저를 연결합니다. 


* CH341 통신 연결하기
OpenDevice()함수를 이용해서 연결시도를 합니다. 연결이 되었으면 true가 리턴되고 실패했으면 false가 리턴됩니다. timer도구를 이용해서 1초에한번씩 OpenDevice()를 호출하고 성공/실패에 따라 UI로 표시해줍니다.

연결성공
연결실패


* SPI 비트전송순서
비트전송순서를 정할수있습니다
SetStream()함수를 이용하면 LSB/MSB를 정하기가 가능합니다.
            //  0 = low bit first, (LSB)
            //  1 = high bit first (MSB)

* SPI 모드/클럭 설정
SPI는 CPOL/CPHA 방식이 있어서 데이터가 읽히는 방식이 총 4가지가 있습니다.
그러나 CH341은 CPOL=0, CPHA=0 고정 방식인 것 같습니다.
클럭속도도 1.5MHz로 고정 방식인 것 같습니다.

* Write/Read하기
StreamSPI4(uint iChipSelect, ref byte[] ioBuffer) 함수를 이용해서 Write/Read합니다.
iChipSelect는 CS를 정하는 핀입니다. 제가 사용하는 보드는 D0핀을 CS로 사용하므로 0x80설정을 합니다.

ioBuffer는 Wrtie할 바이트들을 배열형태로 보내면 됩니다. 그리고 Read도 StreamSPI4함수를 호출하면 ioBuffer로 Read하게 됩니다.


*프로그램테스트
프로그램은 1바이트를 WRITE하고 READ하게만 만들었습니다. 



*소스코드(Commits : Add spi)
https://github.com/yhunterr/CH341_com_csharp