I’m trying to figure out how to use the Colibri iMX7’s analogue inputs to read some pots, battery voltage, etc, and have run into a few issues.
The Colibri ARM SOM iMX7 data sheet says (5.20) that “the input voltage range is only 1.8V and not 3.3V as on other Colibri modules. On the module, there are 10k series resistors placed in the ADC lines in order to protect the SoC input.”
Firstly, is the 1.8 V ADC reference available anywhere on the SODIMM connector? It doesn’t appear to be.
Secondly, NXP recommends a 250 ohm max source impedance for the analogue inputs (iMX7SCEC, 4.12, table 82, Riext). I can’t find a spec for the ADC input current. The GPIO pins are spec’d at ±5 uA (iMX7SCEC, 4.6.1, table 22, Ioz). If this does apply to the ADC then those 10k resistors introduce a ±50 mV error, or ±2.8% of Vref, reducing the 12-bit converter to about a 5-bit accuracy.
Also, the Colibri carrier board design guide seems to have some mistakes. In section 2.15, table 21 shows the touch panel interface but the table is called “Digital audio signals.” In the next section, table 22 is supposed to show the analogue inputs but it has the same pins as table 21.
I need about a 10-bit ADC or at worst 8. I could work around the missing Vref by calibration but the 10k series resistors look like a killer because the input current is not predictable. Hopefully I am missing something somewhere - is this right? What accuracy could I expect? Alternatively there’s the AD7879 touch controller - could it work for this? Would it need a custom linux driver? Any comments welcome - thanks.
The analoge inputs of the Colibri iMX7 are not intended to be used for precise measurements. Even though in the reference manual, there are dedicated voltage reference pins listed, these pins are not available as external pins of the SoC. They are connected internally to the VDDA_ADC1_1P8 supply pins of the SoC. This means the ADC is referenced by the on module 1.8V power rail. This rail is not accessible externally.
As stated in our datasheet, there are 10k series resistor in the ADC input lines in order to protect the SoC from applying 3.3V to this pins. The ADC input pins are not really GPIO pins since they are not multiplexed. Unfortunately, NXP does not give any information about the input current. So, it is hard to judge the influence of the 10k resistors to the accuracy of the converter.
Additional to the potential issues with the ADC input you mentioned, the analog signals have to cross almost the whole module. While the module edge connector pads are on the bottom left side, the SoC balls are located on the top right edge. We have routed the signals as good as possible. But a proper analog ground separation (as for the audio codec and touch controller) was not possible.
Indeed, there is a copy paste error in the Colibri design guide. Thank you for reporting it. we will correct it in the next revision of the document.
As far as I know, the AD7879 does not have an option for using the device as general purpose ADC. It has a fifth input that is intended to be used as battery monitor, but this pin is currently not connected on the Colibri iMX7 module.