zer0c00l
zer0c00l

Reputation: 89

Enable hardware SPI on Xillinux

I have a MicroZed board with Xillinux 1.3 running on it. I wanted to interface an external SPI ADC to it, and write an application in linux to read values from the ADC. Zynq device's hardware SPI interface isn't enabled in Xillinux. How can I go about enabling it, I would have to recompile the FSBL and U-boot, but I don't know where to start. Can I just modify the Xillinux's Vivado design and proceed from there or will I have to start from scratch?

Upvotes: 0

Views: 608

Answers (2)

JosephITA
JosephITA

Reputation: 506

you have to do 2 steps.

1- modify the hardware descriptor file (.h) of your board in your kernel sources and add the spi device. First, take a look at the schematic of the board and the datasheet of the processo to make sure to use the right device with the right name

2- add spidev on your kernel config

now build and boot the kernel, if you check on /dev/ you should find spidev** something.

Upvotes: 0

Jamey Hicks
Jamey Hicks

Reputation: 2370

You should not have to modify FSBL or U-boot. You should only have to add the SPI controller to the device tree and update the programmable logic so that the SPI pins connect to your ADC.

Xilinx SDK has tools for creating the device tree file, described on the Build Device Tree Blob page.

I usually edit .dts files by hand, but you still need to run dtc to convert them to binary format as described on that page.

For an example, here is a .dts fragment for a zynq-zc770-xm013.dts board enabling SPI connected to a flash chip:

&spi0 {
    status = "okay";
    num-cs = <4>;
    is-decoded-cs = <0>;
    eeprom: at25@0 {
        at25,byte-len = <8192>;
        at25,addr-mode = <2>;
        at25,page-size = <32>;

        compatible = "atmel,at25";
        reg = <2>;
        spi-max-frequency = <1000000>;
    };
};

Upvotes: 1

Related Questions