Beaglebone Black에서 spidev 비활성화

Beaglebone Black에서 spidev 비활성화

PRU를 사용하여 Beaglebone Black에서 McSPI 던지기 레지스터 프로그래밍을 실행하고 싶습니다. 따라서 mcspi의 레지스터를 조작하려면 기술 참조 매뉴얼 AM335x에 따라 spidev(해당 spi 모듈의)를 비활성화해야 합니다. 즉, spidev에서 spi 모듈을 제어하고 레지스터 수준 프로그래밍을 사용하고 싶습니다. spidev 모듈을 비활성화하는 방법은 무엇입니까?

또한 내 BBB의 다음 명령은 spidev가 두 spi 모듈 모두에 대해 활성화되어 있음을 보여줍니다.

root@beaglebone:~# ls /dev/sp*
/dev/spidev1.0  /dev/spidev1.1  /dev/spidev2.0  /dev/spidev2.1

답변1

대답은 사용 중인 GNU/Linux 배포판 및 커널 버전에 따라 다르지만 일반적으로 장치 트리 또는 장치 트리 오버레이를 사용해야 합니다.

여기에서 PRU에 의해 제어되는 핀을 비활성화 spi1하고 표시 해야 합니다 .spi2

Linux 4.4.xa의 경우 장치 트리는 다음과 같습니다.

/dts-v1/;

#include "am33xx.dtsi"
#include "am335x-bone-common.dtsi"
#include "am33xx-pruss-rproc.dtsi"

&am33xx_pinmux {
    pru_cape_bone_pins: pru_cape_bone_pins {
        pinctrl-single,pins = <
            BONE_P9_22 ( PIN_INPUT_PULLUP | MUX_MODE0 ) // SCLK
            BONE_P9_21 ( PIN_INPUT_PULLUP | MUX_MODE0 ) // MISO
            BONE_P9_18 ( PIN_OUTPUT_PULLUP | MUX_MODE0 ) // MOSI
            BONE_P9_17 ( PIN_OUTPUT_PULLUP | MUX_MODE0 ) // CS0
        >;
    };
};

&pruss {
    pinctrl-names = "default";
    pinctrl-0 = <&pru_cape_bone_pins>;
};

&spi0 {
    status = "disabled";
};

&spi1 {
    status = "disabled";
};

하지만:이 코드를 그대로 사용하지 마세요!

어떤 파일이 포함되어 있는지, 정확한 핀이나 부품/장치 이름이 확실하지 않으며 .dtsi, 다른 커널 버전에도 약간의 수정이 필요할 수 있습니다.

이것은 spidev와 두 I2C 버스 활성화, 일부 PRU 핀 설정 등을 갖춘 보다 완전한 장치 트리를 기반으로 한 예일 뿐입니다.여기. 커널 4.4.x를 실행하는 Debian Stretch의 BeagleBone Green Wireless를 대상으로 한다는 점을 명심하세요.

이것이 가장 완전한 답변은 아니지만 이것이 귀하를 올바른 방향으로 이끌기를 바랍니다.

관련 정보