arduino_header usage

 Can someone explain and show a simple example of using the arduino_header pins defined in nrf52833dk_nrf52833.dts?  It doesn't make sense to me and I can't find any examples.  Thanks.

arduino_header: connector {
        compatible = "arduino-header-r3";
        #gpio-cells = <2>;
        gpio-map-mask = <0xffffffff 0xffffffc0>;
        gpio-map-pass-thru = <0 0x3f>;
        gpio-map = <0 0 &gpioa 0 0>,    /* A0 */
                   <1 0 &gpioa 1 0>,    /* A1 */
                   <2 0 &gpioa 4 0>,    /* A2 */
                   <3 0 &gpiob 0 0>,    /* A3 */
                   <4 0 &gpioc 1 0>,    /* A4 */
                   <5 0 &gpioc 0 0>,    /* A5 */
                   <6 0 &gpioa 3 0>,    /* D0 */
                   <7 0 &gpioa 2 0>,    /* D1 */
                   <8 0 &gpioa 10 0>,   /* D2 */
                   <9 0 &gpiob 3 0>,    /* D3 */
                   <10 0 &gpiob 5 0>,   /* D4 */
                   <11 0 &gpiob 4 0>,   /* D5 */
                   <12 0 &gpiob 10 0>,  /* D6 */
                   <13 0 &gpioa 8 0>,   /* D7 */
                   <14 0 &gpioa 9 0>,   /* D8 */
                   <15 0 &gpioc 7 0>,   /* D9 */
                   <16 0 &gpiob 6 0>,   /* D10 */
                   <17 0 &gpioa 7 0>,   /* D11 */
                   <18 0 &gpioa 6 0>,   /* D12 */
                   <19 0 &gpioa 5 0>,   /* D13 */
                   <20 0 &gpiob 9 0>,   /* D14 */
                   <21 0 &gpiob 8 0>;   /* D15 */
};
  • Hi,

    For an example of using the arduino_header pins, you can look at the BME280 sensor sample, where one is used for SPI chip select. From the devicetree overlay, arduino_spi.overlay#L11:

    cs-gpios = <&arduino_header 16 GPIO_ACTIVE_LOW>;

    The arduino_header pins can be used to simplify, and it allows you to support multiple boards without making board-specific devicetree overlays if you use an Arduino header. You could use a pin directly, for example:

    cs-gpios = <&gpio1 12 GPIO_ACTIVE_LOW>;

    However, using the arduino_header pins, you can make more general implementations. The arduino_header pin 16 corresponds to D10 on R3-compatible Arduino headers. This should be the case for all the boards in the SDK. Therefore, you know that if you want to use D10 on the Arduino header, you only need to use arduino_header pin 16, regardless of the board, instead of figuring out which pin this corresponds to on the specific board, as this might be different.
    You can see this by looking at the devicetree of nRF53833 DK (nrf52833dk_nrf52833.dts#L95) where arduino_header pin 16 corresponds to P0.20 and nRF52840 DK (nrf52840dk_nrf52840.dts#L95) where it is instead P1.12.

    Best regards,
    Marte

Related