리눅스 spi 예제

Posted on

이 예제에서는 두 개의 SPI 장치를 STM32F7의 SPI2 버스에 연결하고 칩이 이 두 SPI 장치에 대해 선택할 때 PB9 및 PD6 singals를 사용합니다. 우리는 리눅스 사용자 공간에서 “원시 모드”에서 이러한 SPI 장치에 액세스 할 수 있습니다. 다음은 이 구성에 대한 rootfs.dts.STM32F7의 관련 정의입니다. 그리고 보드 init하드 유선 장치를 생성 한 후 필요하지 않습니다. 일부 개발 플랫폼은 spi_register_board_info를 사용하지 못할 수 있으며, 예를 들어 USB 또는 parport 기반 어댑터 드라이버가 장치를 추가할 수 있도록 내보내도 됩니다(대역 외). 사용자 모드 spi 장치 드라이버를 사용하는 방법에는 두 가지가 있습니다. 읽기/쓰기 함수 또는 ioctl()을 호출할 수 있습니다. 읽기/쓰기 호출을 사용하면 한 번에 읽기 또는 쓰기만 할 수 있습니다. 당신은 전체 양면 읽기 및 쓰기가 필요한 경우, 당신은 ioctl의를 호출해야합니다. 둘 다에 대한 예가 제공됩니다. 읽기/쓰기 예제입니다. 플랫폼의 크로스 컴파일러 또는 보드의 네이티브 컴파일러를 사용하여 컴파일할 수 있습니다: 전송 크기는 sun4i의 64바이트, sun6i의 경우 128바이트로 제한됩니다.

코드에서 긴 메시지를 반복해야 합니다. 일부 SPI 장치는 각 메시지 조각을 헤더로 접두사로 지정해야 할 수 있으며, 다른 장치는 그렇지 않을 수 있습니다. Ymmv. 장치 데이터 시트에서 전송 다이어그램을 찾습니다. 알려진 문제: spidev_test.c 예제를 사용하면 [spi]: 드라이버/spi/spi_sunxi.c(L1025) CPU TX 데이터 시간 시간 미정을 받게 됩니다! spidev_fdx.c 방법을 사용하면 매력처럼 작동합니다! 🙂 SPIdev를 사용하여 통신하기 위해 사용자 친화성 라이브러리 (C 함수)를 만들었습니다 : (참고, 이 라이브러리는 읽기 및 쓰기 주소를 2 바이트로 지정) dev에서 platform_data는 장치의 프로토콜 드라이버에 의미있는이 장치에 대한 정보를 보유하는 데 사용됩니다. 하지만 컨트롤러에. 한 가지 예는 약간 다른 기능을 가진 칩 변형에 대한 식별자일 수 있습니다. 또 다른 이 특정 보드가 칩의 핀을 연결하는 방법에 대한 정보일 수 있습니다.

프로토콜 드라이버가 기본 컨트롤러 또는 해당 드라이버가 지원하지 않는 옵션을 지정하면 이 호출이 실패합니다. 예를 들어, 모든 하드웨어가 9비트 단어, LSB 우선 와이어 인코딩 또는 액티브 하이 칩셀렉을 사용하여 전신 전송을 지원하는 것은 아닙니다. 위에서 설명한 대로 dts 파일을 업데이트한 후 Linux 빌드에 설명된 대로 프로젝트를 다시 빌드하고 Linux 이미지를 플래시에 설치하는 데 설명된 대로 대상에 설치합니다. 커널이 대상에서 부팅될 때 성공적인 SPI 컨트롤러 초기화에 대한 커널 메시지를 관찰합니다.