SPI

De Caninos Loucos
Ir para navegação Ir para pesquisar

Labrador SPI

O processador da Labrador conta com diferentes hardwares dedicados para comunicação, um desses hardwares permite o uso de transferência por SPI em altas velocidades de até 60Mps. No entanto esse hardware fica disponível através do barramento de GPIO por multiplexação, desta forma o padrão é desabilitado devido maior uso do GPIOS.

Mapeamento SPI

Observe a que o SPI fica disponível nos pinos 19(SPI0_MOSI), 21(SPI0_MISO), 23(SPI0_SCLK), 24(SPI0_SS).

caption Mapeamento do header de 40 pinos.

Habilitar SPI

Para ativar o SPI é necessário alterar a device-tree do Kernel.

Crie uma pasta para clonar o kernel da labrador;
$mkdir $HOME/kernel_labrador/
Entre na pasta
cd $HOME/kernel_labrador/

Labrador 32bits

$git clone https://github.com/caninos-loucos/labrador-linux

Labrador 64bits

$git clone https://github.com/caninos-loucos/linux-labrador64.git
abra a device-tree com um editor de texto de sua preferência
$gedit linux/arch/arm/boot/dts/caninos_labrador.dts

procure por;

spi0: spi@b0200000 {
		#address-cells = <1>;
		#size-cells = <0>;
		compatible = "caninos,caninos-spi";
		reg = <0xb0200000 0x4000>;
		interrupts = < 0 19 0x4 >;
		pinctrl-names = "default";
		pinctrl-0 = <&spi0_state_default>;
		status = "disabled";
	    };
ative o SPI0, altere o parâmetro status, troque "disabled" por "okay"
*status = "disabled";
por
*status = "okay";
compile o kernel novamente, isso pode ser demorado, pois depende do processamento do seu computador.
$make
      • Observação: se tiver dificuldades em compilar o kernel, consulter o Readme.md na raiz do repositório do kernel.

Quando acabar o processo, o kernel com o SPI0 habilitado estará disponível na pasta output/

      • Observação: veja como trocar o kernel da labrador neste link.

Uma vez substituido uImage, kernel.dtb e a pasta /lib/modules pelos compilados

reinicie a Labrador

utilize o comando lsmod para verificar se o driver foi adicionado
$lsmod
também pode verificar pelo comando dmesg
$sudo dmesg

deverá ver algo como;

Feb 14 08:12:02 debian-armhf kernel: [    8.538818] bus: 'platform': add driver caninos_spi0
Feb 14 08:12:02 debian-armhf kernel: [    8.538947] bus: 'platform': driver_probe_device: matched device b0200000.spi with driver caninos_spi0
Feb 14 08:12:02 debian-armhf kernel: [    8.538966] bus: 'platform': really_probe: probing driver caninos_spi0 with device b0200000.spi
Feb 14 08:12:02 debian-armhf kernel: [    8.539042] pinctrl core: add 2 pinctrl maps
Feb 14 08:12:02 debian-armhf kernel: [    8.539127] caninos-labrador-pinctrl soc:pinctrl@b01b0040: found group selector 34 for mfp1_2_0
Feb 14 08:12:02 debian-armhf kernel: [    8.539141] caninos-labrador-pinctrl soc:pinctrl@b01b0040: found group selector 33 for mfp1_4_3
Feb 14 08:12:02 debian-armhf kernel: [    8.539152] caninos_spi0 b0200000.spi: no init pinctrl state
Feb 14 08:12:02 debian-armhf kernel: [    8.539167] caninos-labrador-pinctrl soc:pinctrl@b01b0040: request pin 87 (P_SPI0_SS) for b0200000.spi
Feb 14 08:12:02 debian-armhf kernel: [    8.539177] caninos-labrador-pinctrl soc:pinctrl@b01b0040: request pin 88 (P_SPI0_MISO) for b0200000.spi
Feb 14 08:12:02 debian-armhf kernel: [    8.539196] caninos-labrador-pinctrl soc:pinctrl@b01b0040: request pin 86 (P_SPI0_SCLK) for b0200000.spi
Feb 14 08:12:02 debian-armhf kernel: [    8.539203] caninos-labrador-pinctrl soc:pinctrl@b01b0040: request pin 89 (P_SPI0_MOSI) for b0200000.spi
Feb 14 08:12:02 debian-armhf kernel: [    8.539215] caninos_spi0 b0200000.spi: no sleep pinctrl state
Feb 14 08:12:02 debian-armhf kernel: [    8.539222] caninos_spi0 b0200000.spi: no idle pinctrl state
Feb 14 08:12:02 debian-armhf kernel: [    8.539271] devices_kset: Moving b0200000.spi to end of list
Feb 14 08:12:02 debian-armhf kernel: [    8.552479] device: 'spi0': device_add
Feb 14 08:12:02 debian-armhf kernel: [    8.552784] PM: Adding info for No Bus:spi0
Feb 14 08:12:02 debian-armhf kernel: [    8.552906] caninos_spi0 b0200000.spi: controller is unqueued, this is deprecated
Feb 14 08:12:02 debian-armhf kernel: [    8.552925] driver: 'caninos_spi0': driver_bound: bound to device 'b0200000.spi'
Feb 14 08:12:02 debian-armhf kernel: [    8.553044] bus: 'platform': really_probe: bound device b0200000.spi to driver caninos_spi0