Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Step 1: Get some Zynq based board. One On my desk was a ZYNQ XC7Z7045-FFG900 based board. That should do?

Image Added

There is a LED on MIO7, so from hardware side, it is prepared. Getting Linux working, well that is also simple. Start Vivado, new project, build, export to SDK, add FSBL, build BOOT.BIN, adding u-boot.elf. Done. Works first try.

...

And failed again, there are no LEDs available. They are missing in device-tree. Let's add the on-board LED to the device-tree. This can be done with utility called DTC. To my big surprise this tool is not at all available for Windows PC. Help... A few hours later I have DTC executable that works on Windows. My coworker who made it possible sends win32 patches to the maintainers of DTC tool, and I add the DTC.EXE for free downloads. to our download area.

Note

It is also of course possible to run DTC from Zynq Linux prompt as well, it seems to be available on all Zynq Linux versions. DTC.EXE is just a handy tool for windows host PC.

 

To de-compile binary device tree file to textual version we an can create a single line batch file DECOMPILE.BAT with this line inside:

...

Note

It is better to keep the decompile.bat in different directory after first decompile, as some changes to the textual device tree file will get lost if we accidentially accidentally decompile the blob in the same directory where the modified DTS file is.

...

Thats all, now we invoke compile.bat and copy the devicetree.dtb file back the SDd Card.

 

 

 

 

SD Card.

Image Added

And now we have assigned Linux LED heartbeat to the Green on-board LED on TE0720.

Ups, and it works on 3.14 Kernel.

We can assign "events the LED" or just control the LED to be on or off. Please note that we can also control GPIO devices connected to I2C Bus as well (if they are I2C GPIO Class devices, or emulated I2C Device in CPLD connected to FPGA).

Why MIO7 you may ask? This is the most famous Zynq LED number ever seven: MIO7 is one of two MIO pins that are usable as OUTPUT Only and also in almost all Zynq designs MIO7 is in 3.3V MIO bank, so it is first candidate for a "User LED". In TE0720 MIO7 is connected to System Controller that as default connects to a LED. But the System Controller could also use the MIO7 as some signal from Zynq ARM Core, or route the MIO7 back to the Zynq PL Fabric, or use the MIO7 as FORCE reset or something else.

So what about the LED on the 7045 board? As I have not updated the Kernel there, the LED Class is not available, so I have to-do it the old fashion GPIO way:

cd /sys/class/gpio
echo 7 > export
cd gpio7
echo out > direction
echo 1 > value
 

And the LED on below 7045 is on as well...

Image Added

But why was it needed to set MIO7 direction to out, if this pin is Output only? Well it is not usable as input, but Linux driver system does not know that it is output only and it listed with direction input initially. 

Zedboard OOB Design

The SD Card images delivered with zedboard (and available as OOB SD Card images) include a kernel 3.09 with GPIO-LEDS enabled on MIO7 with default trigger set to MMC (SD Card) activity. Writing none to LED trigger would allow direct programmatic control over MIO7 LED on zedboard (labelled LD9!). 

...