I am working with a customer using the above hardware. They are using, or wish to use the RPI connector on the Aster carrier board to provide access to 12 gpio inputs and 8 gpio outputs.
So one thing I was looking at was the device-tree. The first question I had is:
Why does the aster board use the imx6dl-colibri-eval-v3.dts device tree? This is in fact what is loaded.
I am sure I did not change anything. Is this normal?
Is it expected that we can disable various things, like SPI4, I2C3, and the PWMs in the DT, and be able to use these pins as just general purpose I/O available on the RPI connector?
Are there limitations on what pins on the RPI header can be used for what? For example, I disabled I2C3, but was still unable to use pins 194 and 196 (XM20 header pins 3 and 5, respectively) as output GPIOs.
Is there another carrier board for the colibri-imx6dl that might provide more flexibility in this regard?
The Colibri Evaluation Board device tree (
imx6dl-colibri-eval-v3.dts ) is loaded by default on our reference images. You should also have an Aster device tree (
imx6dl-colibri-aster.dts ). You can check this on the module’s boot partition, mounted on
/media/mmcblk0p1 on our reference images.
With the Aster .dtb present, you can modify the
fdt_file environment variable on U-Boot so it points to the correct file, e.g.
setenv fdt_file 'imx6dl-colibri-aster.dts'.
Regarding your second question, you’re able to disable interfaces and reassign pins as GPIOs by modifying the device tree. Check out this article to learn more about the device tree hierarchy and find out which one you’ll be changing.
The limitations on which functions a pin can assume depend on the SoC, not necessarily on the carrier board. You can check all functions a pin may assume on the Function List on the module’s datasheet. The pins you mentioned (SODIMM pins 194 and 196) can be used as GPIOs as can be seen on the ALT5 column on the Function List table. They correspond to GPIO1_IO06 and GPIO1_IO03, respectively. So all you have to do is disable the corresponding pin assignments for the I2C interface on those pins and mux them with the GPIO function. This is also covered in the Device Tree article I mentioned earlier.