Outils pour utilisateurs

Outils du site


wiki:linux_pour_zynq_de_xilinx:projet_spidev_buildroot

Ceci est une ancienne révision du document !


SPIDev avec Buildroot

Ici nous allons montrer un exemple d'utilisation de l'interface standard de Linux SPIDev. Nous allons configurer Buildroot pour qu'il prenne en charge l'interface SPI0 du processeur Zynq, une fois configurée avec Vivado et Xilinx SDK.
Pour l'installtion de Buildroot, on pourra se reporter par exemple au chapitre création de Buildroot sous environnement Vagrant.
Nous travaillons ici avec la version buildroot-2016.08.

Préparations

Nous allons créer un répertoire microzed_spidev où nous conserverons les sorties de Buildroot

$ cd ~
$ mkdir microzed_spidev

Nous allons utiliser la configuration par défaut de Buildroot adaptée à la carte microzed. D'abord, où se trouve-t-elle ?

$ ls ~/buildroot-2016.08/configs
...
zynq_zed_defconfig

Maintenant, créons la configuration adaptée :

$ cd ~/buildroot-2016.08
$ make O=../microzed_spidev/ zynq_microzed_defconfig
...
#
# configuration written to ../microzed_spidev//.config
#

Quels sont les résultats ?

  • <color blue> ~/microzed_spidev </color>
    <color blue>build</color> .config Makefile
    • <color blue> build </color>
      <color blue>buildroot-config</color>
      • <color blue>buildroot-config</color>
        conf conf.o .depend <color blue>lxdialog</color> zconf.hash.c zconf.lex.c zconf.tab.o
$ make O=../microzed_spidev/ menuconfig
$ make O=../microzed_spidev/

Quels sont les résultats ?

  • <color blue> ~/microzed_spidev </color>
    <color blue>build</color> .config .config.cmd <color blue>host images</color> Makefile <color cyan>staging</color> <color blue>target</color>

Modifications pour prendre en compte la configuration du processeur

copier les fichiers ps7_init_gpl.[c/h]

Afin de prendre en compte l'ensemble des périphériques configurés du processeur PS7, dans notre cas l'activation de l'interface SPI0, il est nécessaire de charger les fichiers ps7_init_gpl.[c/h] dans l'arborescence de u-boot. Ainsi , le FSBL (First Stage Boot Loader) pourra configurer correctement le processeur. Pour cela il faut dans un premier temps copier les fichiers dans le répertoire commune avec la machine virtuelle et l'hôte (si on utilise Vagrant) dans une console à part

$ cp  ~/chemin_du_projet_vivado.sdk/design_1_wrapper_hw_platform_0/ps7_init_gpl.c ~/chemin_de_la_machine_virtuelle_vagrant/
$ cp  ~/chemin_du_projet_vivado.sdk/design_1_wrapper_hw_platform_0/ps7_init_gpl.h ~/chemin_de_la_machine_virtuelle_vagrant/

Ensuite, dans la console de la machine virtuelle, copier ces fichiers dans le répertoire associé à une carte zynq personnalisée :

 $ cp /vagrant/ps7_init_gpl.c ~/microzed_spidev/build/uboot-xilinx-v2016.2/board/xilinx/zynq/custom_hw_platform/
 $ cp /vagrant/ps7_init_gpl.h ~/microzed_spidev/build/uboot-xilinx-v2016.2/board/xilinx/zynq/custom_hw_platform/

configurer u-boot

Cocher la case Use custom ps7_init provided by Xilinx tool du menu de configuration.

$ make O=../microzed_spidev/ uboot-menuconfig

dans le menu : → ARM archtecture –>[*] Use custom ps7_init provided by Xilinx tool

changer le device tree

Il est nécessaire de prendre en compte le périphérique SPI0 comme étant rattaché qu driver SPIDEV. Pour cela il faut modifier le fichier zynq-zed.dts fournit par défaut, ou indiquer un autre fichier dts Voici un exemple de fichier que nous appellerons zynq-zed_spi0_spidev.dts placé dans le répertoire /vagrant/ afin de ne pas le perdre en cas de nettoyage de la configuration : ++++ zynq-zed_spi0_spidev.dts |

/*
 *  Copyright (C) 2011 - 2014 Xilinx
 *  Copyright (C) 2012 National Instruments Corp.
 *
 * This software is licensed under the terms of the GNU General Public
 * License version 2, as published by the Free Software Foundation, and
 * may be copied, distributed, and modified under those terms.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */
/dts-v1/;
#include "zynq-7000.dtsi"
 
/ {
	model = "Zynq Zed Development Board";
	compatible = "xlnx,zynq-zed", "xlnx,zynq-7000";
 
	aliases {
		ethernet0 = &gem0;
		serial0 = &uart1;
		/*spi0 = &qspi;*/
		mmc0 = &sdhci0;
	};
 
	memory {
		device_type = "memory";
		reg = <0x0 0x20000000>;
	};
 
	chosen {
		bootargs = "";
		stdout-path = "serial0:115200n8";
	};
 
	usb_phy0: phy0 {
		compatible = "ulpi-phy";
		#phy-cells = <0>;
		reg = <0xe0002000 0x1000>;
		view-port = <0x0170>;
		drv-vbus;
	};
	regulators {
        	compatible = "simple-bus";
        	#address-cells = <1>;
        	#size-cells = <0>;
 
        	reg_dac_vdd: regulator@0 {
            	compatible = "regulator-fixed";
            	reg = <0>;
            	regulator-name = "dac_vdd";
            	regulator-min-microvolt = <10000000>;
            	regulator-max-microvolt = <10000000>;
        	};
        	reg_dac_vss: regulator@1 {
            	compatible = "regulator-fixed";
            	reg = <1>;
            	regulator-name = "dac_vss";
            	regulator-min-microvolt = <10000000>;
            	regulator-max-microvolt = <10000000>;
        	};
    	};
};
 
&clkc {
	ps-clk-frequency = <33333333>;
};
 
&gem0 {
	status = "okay";
	phy-mode = "rgmii-id";
	phy-handle = <&ethernet_phy>;
 
	ethernet_phy: ethernet-phy@0 {
		reg = <0>;
	};
};
 
&qspi {
	status = "okay";
	is-dual = <0>;
	num-cs = <1>;
	flash@0 {
		compatible = "n25q128a11";
		reg = <0x0>;
		spi-tx-bus-width = <1>;
		spi-rx-bus-width = <4>;
		spi-max-frequency = <50000000>;
		#address-cells = <1>;
		#size-cells = <1>;
		partition@qspi-fsbl-uboot {
			label = "qspi-fsbl-uboot";
			reg = <0x0 0x100000>;
		};
		partition@qspi-linux {
			label = "qspi-linux";
			reg = <0x100000 0x500000>;
		};
		partition@qspi-device-tree {
			label = "qspi-device-tree";
			reg = <0x600000 0x20000>;
		};
		partition@qspi-rootfs {
			label = "qspi-rootfs";
			reg = <0x620000 0x5E0000>;
		};
		partition@qspi-bitstream {
			label = "qspi-bitstream";
			reg = <0xC00000 0x400000>;
		};
	};
};
 
&spi0 {
        num-cs = <4>;
        is-decoded-cs = <0>;
        status = "okay";
        spidev@0 {
                compatible = "spidev";
                reg = <0>;
                spi-max-frequency = <5000000>;
                spi-cpha ;
        };
};
 
 
&sdhci0 {
	status = "okay";
};
 
&uart1 {
	status = "okay";
};
 
&usb0 {
	status = "okay";
	dr_mode = "host";
	usb-phy = <&usb_phy0>;
};

++++

configurer la prise en charge du nouveau device tree

$ make O=../microzed_spidev/ menuconfig

dans le menu → Kernel –> Device tree source —> (X) Use a custom device tree file dans le menu → Kernel –> Device Tree Source file paths —> /vagrant/zynq-zed_spi0_spidev.dts

configurer linux avec le driver //SPIDEV//

$ make O=../microzed_spidev/ linux-menuconfig

dans le menu → Device Drivers –> [*] SPI support —> <*> User mode SPI device driver support

appliquer les chagements

$ make O=../microzed_spidev/

Il se peut que seul la génération uImage et le fichier dtb soit nécessaire à regénérer. Alors :

$ make O=../microzed_spidev/ linux-rebuild
wiki/linux_pour_zynq_de_xilinx/projet_spidev_buildroot.1479990171.txt.gz · Dernière modification : 2016/11/24 13:22 de emeyer