SPI
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).
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