As the title states, I'm having an issue properly configuring the overlay/getting the sample driver/program to build. I get the following build error
Error Code:
FAILED: CMakeFiles/app.dir/src/main.c.obj
C:\Users\$USER\ncs\v1.5.1\toolchain\opt\bin\arm-none-eabi-gcc.exe -DBUILD_VERSION=v2.4.99-ncs2-2-g5049afda7b9f -DKERNEL -DNRF52833_XXAA -DUSE_PARTITION_MANAGER=0 -D_FORTIFY_SOURCE=2 -D__PROGRAM_START -D__ZEPHYR__=1 -IC:/Users/$USER/ncs/v1.5.1/zephyr/include -Izephyr/include/generated -IC:/Users/$USER/ncs/v1.5.1/zephyr/soc/arm/nordic_nrf/nrf52 -IC:/Users/$USER/ncs/v1.5.1/nrf/include -IC:/Users/$USER/ncs/v1.5.1/modules/hal/nordic/nrfx -IC:/Users/$USER/ncs/v1.5.1/modules/hal/nordic/nrfx/drivers/include -IC:/Users/$USER/ncs/v1.5.1/modules/hal/nordic/nrfx/mdk -IC:/Users/$USER/ncs/v1.5.1/zephyr/modules/hal_nordic/nrfx/. -IC:/Users/$USER/ncs/v1.5.1/modules/hal/cmsis/CMSIS/Core/Include -IC:/Users/$USER/ncs/v1.5.1/modules/debug/segger/rtt -isystem C:/Users/$USER/ncs/v1.5.1/zephyr/lib/libc/minimal/include -isystem c:/users/$USER/ncs/v1.5.1/toolchain/opt/bin/../lib/gcc/arm-none-eabi/9.2.1/include -isystem c:/users/$USER/ncs/v1.5.1/toolchain/opt/bin/../lib/gcc/arm-none-eabi/9.2.1/include-fixed -Os -imacros C:/Users/$USER/Tecovan/dev_projects/spi_fujitsu_fram/build/zephyr/include/generated/autoconf.h -ffreestanding -fno-common -g -mcpu=cortex-m4 -mthumb -mabi=aapcs -imacros C:/Users/$USER/ncs/v1.5.1/zephyr/include/toolchain/zephyr_stdint.h -Wall -Wformat -Wformat-security -Wno-format-zero-length -Wno-main -Wno-pointer-sign -Wpointer-arith -Wno-address-of-packed-member -Wno-unused-but-set-variable -Werror=implicit-int -fno-asynchronous-unwind-tables -fno-pie -fno-pic -fno-strict-overflow -fno-reorder-functions -fno-defer-pop -fmacro-prefix-map=C:/Users/$USER/Tecovan/dev_projects/spi_fujitsu_fram=CMAKE_SOURCE_DIR -fmacro-prefix-map=C:/Users/$USER/ncs/v1.5.1/zephyr=ZEPHYR_BASE -fmacro-prefix-map=C:/Users/$USER/ncs/v1.5.1=WEST_TOPDIR -ffunction-sections -fdata-sections -std=c99 -nostdinc -MD -MT CMakeFiles/app.dir/src/main.c.obj -MF CMakeFiles\app.dir\src\main.c.obj.d -o CMakeFiles/app.dir/src/main.c.obj -c ../src/main.c
In file included from C:/Users/$USER/ncs/v1.5.1/zephyr/include/arch/arm/aarch32/arch.h:20,
from C:/Users/$USER/ncs/v1.5.1/zephyr/include/arch/cpu.h:19,
from C:/Users/$USER/ncs/v1.5.1/zephyr/include/kernel_includes.h:33,
from C:/Users/$USER/ncs/v1.5.1/zephyr/include/kernel.h:17,
from C:/Users/$USER/ncs/v1.5.1/zephyr/include/zephyr.h:18,
from ../src/main.c:8:
../src/main.c: In function 'main':
C:/Users/$USER/ncs/v1.5.1/zephyr/include/devicetree.h:208:32: error: 'DT_N_ALIAS_spi_1_P_label' undeclared (first use in this function)
208 | #define DT_ALIAS(alias) DT_CAT(DT_N_ALIAS_, alias)
| ^~~~~~~~~~~
C:/Users/$USER/ncs/v1.5.1/zephyr/include/devicetree.h:2176:24: note: in definition of macro 'DT_CAT'
2176 | #define DT_CAT(a1, a2) a1 ## a2
| ^~
C:/Users/$USER/ncs/v1.5.1/zephyr/include/devicetree.h:584:27: note: in expansion of macro 'DT_PROP'
584 | #define DT_LABEL(node_id) DT_PROP(node_id, label)
| ^~~~~~~
../src/main.c:23:17: note: in expansion of macro 'DT_LABEL'
23 | #define SPI_DEV DT_LABEL(DT_ALIAS(spi_1))
| ^~~~~~~~
C:/Users/$USER/ncs/v1.5.1/zephyr/include/devicetree.h:208:25: note: in expansion of macro 'DT_CAT'
208 | #define DT_ALIAS(alias) DT_CAT(DT_N_ALIAS_, alias)
| ^~~~~~
../src/main.c:23:26: note: in expansion of macro 'DT_ALIAS'
23 | #define SPI_DEV DT_LABEL(DT_ALIAS(spi_1))
| ^~~~~~~~
../src/main.c:150:27: note: in expansion of macro 'SPI_DEV'
150 | spi = device_get_binding(SPI_DEV);
| ^~~~~~~
C:/Users/$USER/ncs/v1.5.1/zephyr/include/devicetree.h:208:32: note: each undeclared identifier is reported only once for each function it appears in
208 | #define DT_ALIAS(alias) DT_CAT(DT_N_ALIAS_, alias)
| ^~~~~~~~~~~
C:/Users/$USER/ncs/v1.5.1/zephyr/include/devicetree.h:2176:24: note: in definition of macro 'DT_CAT'
2176 | #define DT_CAT(a1, a2) a1 ## a2
| ^~
C:/Users/$USER/ncs/v1.5.1/zephyr/include/devicetree.h:584:27: note: in expansion of macro 'DT_PROP'
584 | #define DT_LABEL(node_id) DT_PROP(node_id, label)
| ^~~~~~~
../src/main.c:23:17: note: in expansion of macro 'DT_LABEL'
23 | #define SPI_DEV DT_LABEL(DT_ALIAS(spi_1))
| ^~~~~~~~
C:/Users/$USER/ncs/v1.5.1/zephyr/include/devicetree.h:208:25: note: in expansion of macro 'DT_CAT'
208 | #define DT_ALIAS(alias) DT_CAT(DT_N_ALIAS_, alias)
| ^~~~~~
../src/main.c:23:26: note: in expansion of macro 'DT_ALIAS'
23 | #define SPI_DEV DT_LABEL(DT_ALIAS(spi_1))
| ^~~~~~~~
../src/main.c:150:27: note: in expansion of macro 'SPI_DEV'
150 | spi = device_get_binding(SPI_DEV);
| ^~~~~~~
[76/141] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/crc8_sw.c.obj
[77/141] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/crc16_sw.c.obj
[78/141] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/hex.c.obj
[79/141] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/crc7_sw.c.obj
[80/141] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/dec.c.obj
[81/141] Linking C static library zephyr\kernel\libkernel.a
[82/141] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/fdtable.c.obj
[83/141] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/timeutil.c.obj
[84/141] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/sem.c.obj
ninja: build stopped: subcommand failed.
FATAL ERROR: command exited with status 1: 'C:\Users\$USER\ncs\v1.5.1\toolchain\opt\bin\cmake.EXE' --build 'C:\Users\$USER\Tecovan\dev_projects\spi_fujitsu_fram\build'
I get that it isn't recognizing/linking the binding in the test program to the .dts file but I don't understand why. What am I missing/doing wrong?
This is the full output/error from West when building:
$USER@MSOE-PF2CWB0L MINGW64 ~/Tecovan/dev_projects/spi_fujitsu_fram
$ west build -b nrf52833dk_nrf52833 && west flash --erase
[0/1] Re-running CMake...
Including boilerplate (Zephyr base (cached)): C:/Users/$USER/ncs/v1.5.1/zephyr/cmake/app/boilerplate.cmake
-- Application: C:/Users/$USER/Tecovan/dev_projects/spi_fujitsu_fram
-- Using NCS Toolchain 1.5.1 for building. (C:/Users/$USER/ncs/v1.5.1/toolchain/cmake)
-- Zephyr version: 2.4.99 (C:/Users/$USER/ncs/v1.5.1/zephyr)
-- Found west (found suitable version "0.9.0", minimum required is "0.7.1")
-- Board: nrf52833dk_nrf52833
-- Cache files will be written to: C:/Users/$USER/ncs/v1.5.1/zephyr/.cache
-- Found dtc: C:/Users/$USER/ncs/v1.5.1/toolchain/opt/bin/dtc.exe (found suitable version "1.4.7", minimum required is "1.4.6")
-- Found toolchain: gnuarmemb (C:/Users/$USER/ncs/v1.5.1/toolchain/opt)
-- Found BOARD.dts: C:/Users/$USER/ncs/v1.5.1/zephyr/boards/arm/nrf52833dk_nrf52833/nrf52833dk_nrf52833.dts
-- Found devicetree overlay: C:/Users/$USER/Tecovan/dev_projects/spi_fujitsu_fram/nrf52833dk_nrf52833.overlay
-- Generated zephyr.dts: C:/Users/$USER/Tecovan/dev_projects/spi_fujitsu_fram/build/zephyr/zephyr.dts
-- Generated devicetree_unfixed.h: C:/Users/$USER/Tecovan/dev_projects/spi_fujitsu_fram/build/zephyr/include/generated/devicetree_unfixed.h
-- Generated device_extern.h: C:/Users/$USER/Tecovan/dev_projects/spi_fujitsu_fram/build/zephyr/include/generated/device_extern.h
Parsing C:/Users/$USER/ncs/v1.5.1/zephyr/Kconfig
Loaded configuration 'C:/Users/$USER/Tecovan/dev_projects/spi_fujitsu_fram/build/zephyr/.config'
Configuration saved to 'C:/Users/$USER/Tecovan/dev_projects/spi_fujitsu_fram/build/zephyr/.config'
Kconfig header saved to 'C:/Users/$USER/Tecovan/dev_projects/spi_fujitsu_fram/build/zephyr/include/generated/autoconf.h'
-- Configuring done
-- Generating done
-- Build files have been written to: C:/Users/$USER/Tecovan/dev_projects/spi_fujitsu_fram/build
[1/141] Generating misc/generated/syscalls.json, misc/generated/struct_tags.json
[2/141] Building C object zephyr/CMakeFiles/offsets.dir/arch/arm/core/offsets/offsets.c.obj
[3/141] Generating include/generated/offsets.h
[4/141] Generating linker.cmd
[5/141] Building C object zephyr/lib/libc/minimal/CMakeFiles/lib__libc__minimal.dir/source/stdout/stdout_console.c.obj
[6/141] Building C object zephyr/lib/libc/minimal/CMakeFiles/lib__libc__minimal.dir/source/string/strspn.c.obj
[7/141] Building C object zephyr/CMakeFiles/zephyr.dir/drivers/timer/sys_clock_init.c.obj
[8/141] Building C object zephyr/CMakeFiles/zephyr.dir/C_/Users/$USER/ncs/v1.5.1/modules/debug/segger/rtt/SEGGER_RTT_zephyr.c.obj
[9/141] Building C object zephyr/CMakeFiles/zephyr.dir/drivers/console/uart_console.c.obj
[10/141] Building C object zephyr/CMakeFiles/zephyr.dir/subsys/power/reboot.c.obj
[11/141] Building C object zephyr/CMakeFiles/zephyr.dir/drivers/timer/nrf_rtc_timer.c.obj
[12/141] Building C object zephyr/CMakeFiles/zephyr.dir/C_/Users/$USER/ncs/v1.5.1/modules/debug/segger/rtt/SEGGER_RTT.c.obj
[13/141] Building C object zephyr/CMakeFiles/zephyr.dir/drivers/clock_control/clock_control_nrf.c.obj
[14/141] Building C object zephyr/CMakeFiles/zephyr_prebuilt.dir/misc/empty_file.c.obj
[15/141] Building C object zephyr/lib/libc/minimal/CMakeFiles/lib__libc__minimal.dir/source/time/gmtime.c.obj
[16/141] Building C object zephyr/CMakeFiles/zephyr.dir/subsys/power/policy/policy_residency.c.obj
[17/141] Building C object zephyr/lib/libc/minimal/CMakeFiles/lib__libc__minimal.dir/source/stdout/sprintf.c.obj
[18/141] Building C object zephyr/CMakeFiles/zephyr.dir/soc/arm/nordic_nrf/validate_enabled_instances.c.obj
[19/141] Building C object zephyr/CMakeFiles/zephyr.dir/subsys/power/power.c.obj
[20/141] Building C object zephyr/lib/posix/CMakeFiles/lib__posix.dir/pthread_common.c.obj
[21/141] Building C object zephyr/lib/libc/minimal/CMakeFiles/lib__libc__minimal.dir/source/stdout/fprintf.c.obj
[22/141] Building C object zephyr/soc/arm/common/cortex_m/CMakeFiles/soc__arm__common__cortex_m.dir/arm_mpu_regions.c.obj
[23/141] Building C object zephyr/lib/posix/CMakeFiles/lib__posix.dir/nanosleep.c.obj
[24/141] Building C object zephyr/soc/arm/nordic_nrf/nrf52/CMakeFiles/soc__arm__nordic_nrf__nrf52.dir/soc.c.obj
[25/141] Building C object zephyr/soc/arm/nordic_nrf/nrf52/CMakeFiles/soc__arm__nordic_nrf__nrf52.dir/power.c.obj
[26/141] Building C object zephyr/drivers/gpio/CMakeFiles/drivers__gpio.dir/gpio_nrfx.c.obj
[27/141] Linking C static library zephyr\lib\posix\liblib__posix.a
[28/141] Building C object zephyr/drivers/spi/CMakeFiles/drivers__spi.dir/spi_nrfx_spi.c.obj
[29/141] Building C object modules/hal_nordic/CMakeFiles/modules__hal_nordic.dir/C_/Users/$USER/ncs/v1.5.1/modules/hal/nordic/nrfx/mdk/system_nrf52833.c.obj
[30/141] Building C object modules/nrf/lib/fatal_error/CMakeFiles/..__nrf__lib__fatal_error.dir/fatal_error.c.obj
[31/141] Building C object zephyr/drivers/spi/CMakeFiles/drivers__spi.dir/spi_nrfx_spim.c.obj
[32/141] Linking C static library zephyr\soc\arm\common\cortex_m\libsoc__arm__common__cortex_m.a
[33/141] Linking C static library zephyr\soc\arm\nordic_nrf\nrf52\libsoc__arm__nordic_nrf__nrf52.a
[34/141] Building C object zephyr/drivers/serial/CMakeFiles/drivers__serial.dir/uart_nrfx_uarte.c.obj
[35/141] Building C object modules/hal_nordic/CMakeFiles/modules__hal_nordic.dir/nrfx/nrfx_glue.c.obj
[36/141] Linking C static library zephyr\drivers\gpio\libdrivers__gpio.a
[37/141] Linking C static library zephyr\drivers\spi\libdrivers__spi.a
[38/141] Linking C static library modules\nrf\lib\fatal_error\lib..__nrf__lib__fatal_error.a
[39/141] Building C object modules/hal_nordic/CMakeFiles/modules__hal_nordic.dir/C_/Users/$USER/ncs/v1.5.1/modules/hal/nordic/nrfx/drivers/src/nrfx_clock.c.obj
[40/141] Linking C static library zephyr\drivers\serial\libdrivers__serial.a
[41/141] Building C object modules/hal_nordic/CMakeFiles/modules__hal_nordic.dir/C_/Users/$USER/ncs/v1.5.1/modules/hal/nordic/nrfx/drivers/src/nrfx_spi.c.obj
[42/141] Building C object modules/hal_nordic/CMakeFiles/modules__hal_nordic.dir/C_/Users/$USER/ncs/v1.5.1/modules/hal/nordic/nrfx/drivers/src/nrfx_spim.c.obj
[43/141] Building C object zephyr/kernel/CMakeFiles/kernel.dir/device.c.obj
[44/141] Building C object zephyr/kernel/CMakeFiles/kernel.dir/errno.c.obj
[45/141] Building C object modules/hal_nordic/CMakeFiles/modules__hal_nordic.dir/C_/Users/$USER/ncs/v1.5.1/modules/hal/nordic/nrfx/drivers/src/nrfx_ppi.c.obj
[46/141] Building C object modules/hal_nordic/CMakeFiles/modules__hal_nordic.dir/C_/Users/$USER/ncs/v1.5.1/modules/hal/nordic/nrfx/drivers/src/nrfx_gpiote.c.obj
[47/141] Building C object zephyr/kernel/CMakeFiles/kernel.dir/idle.c.obj
[48/141] Building C object zephyr/kernel/CMakeFiles/kernel.dir/fatal.c.obj
[49/141] Building C object zephyr/kernel/CMakeFiles/kernel.dir/kheap.c.obj
[50/141] Building C object zephyr/kernel/CMakeFiles/kernel.dir/mem_slab.c.obj
[51/141] Building C object zephyr/kernel/CMakeFiles/kernel.dir/init.c.obj
[52/141] Linking C static library modules\hal_nordic\libmodules__hal_nordic.a
[53/141] Building C object zephyr/kernel/CMakeFiles/kernel.dir/mutex.c.obj
[54/141] Building C object zephyr/kernel/CMakeFiles/kernel.dir/thread.c.obj
[55/141] Building C object zephyr/kernel/CMakeFiles/kernel.dir/msg_q.c.obj
[56/141] Building C object zephyr/kernel/CMakeFiles/kernel.dir/mailbox.c.obj
[57/141] Building C object zephyr/kernel/CMakeFiles/kernel.dir/sem.c.obj
[58/141] Building C object zephyr/kernel/CMakeFiles/kernel.dir/stack.c.obj
[59/141] Building C object zephyr/kernel/CMakeFiles/kernel.dir/system_work_q.c.obj
[60/141] Building C object zephyr/kernel/CMakeFiles/kernel.dir/version.c.obj
[61/141] Building C object zephyr/kernel/CMakeFiles/kernel.dir/queue.c.obj
[62/141] Building C object zephyr/kernel/CMakeFiles/kernel.dir/banner.c.obj
[63/141] Building C object zephyr/kernel/CMakeFiles/kernel.dir/smp.c.obj
[64/141] Building C object zephyr/kernel/CMakeFiles/kernel.dir/work_q.c.obj
[65/141] Building C object zephyr/kernel/CMakeFiles/kernel.dir/thread_abort.c.obj
[66/141] Building C object zephyr/kernel/CMakeFiles/kernel.dir/pipes.c.obj
[67/141] Building C object zephyr/kernel/CMakeFiles/kernel.dir/condvar.c.obj
[68/141] Building C object zephyr/kernel/CMakeFiles/kernel.dir/sched.c.obj
[69/141] Building C object zephyr/kernel/CMakeFiles/kernel.dir/xip.c.obj
[70/141] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/cbprintf.c.obj
[71/141] Building C object zephyr/kernel/CMakeFiles/kernel.dir/timer.c.obj
[72/141] Building C object zephyr/kernel/CMakeFiles/kernel.dir/mempool.c.obj
[73/141] Building C object zephyr/kernel/CMakeFiles/kernel.dir/timeout.c.obj
[74/141] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/crc32_sw.c.obj
[75/141] Building C object CMakeFiles/app.dir/src/main.c.obj
FAILED: CMakeFiles/app.dir/src/main.c.obj
C:\Users\$USER\ncs\v1.5.1\toolchain\opt\bin\arm-none-eabi-gcc.exe -DBUILD_VERSION=v2.4.99-ncs2-2-g5049afda7b9f -DKERNEL -DNRF52833_XXAA -DUSE_PARTITION_MANAGER=0 -D_FORTIFY_SOURCE=2 -D__PROGRAM_START -D__ZEPHYR__=1 -IC:/Users/$USER/ncs/v1.5.1/zephyr/include -Izephyr/include/generated -IC:/Users/$USER/ncs/v1.5.1/zephyr/soc/arm/nordic_nrf/nrf52 -IC:/Users/$USER/ncs/v1.5.1/nrf/include -IC:/Users/$USER/ncs/v1.5.1/modules/hal/nordic/nrfx -IC:/Users/$USER/ncs/v1.5.1/modules/hal/nordic/nrfx/drivers/include -IC:/Users/$USER/ncs/v1.5.1/modules/hal/nordic/nrfx/mdk -IC:/Users/$USER/ncs/v1.5.1/zephyr/modules/hal_nordic/nrfx/. -IC:/Users/$USER/ncs/v1.5.1/modules/hal/cmsis/CMSIS/Core/Include -IC:/Users/$USER/ncs/v1.5.1/modules/debug/segger/rtt -isystem C:/Users/$USER/ncs/v1.5.1/zephyr/lib/libc/minimal/include -isystem c:/users/$USER/ncs/v1.5.1/toolchain/opt/bin/../lib/gcc/arm-none-eabi/9.2.1/include -isystem c:/users/$USER/ncs/v1.5.1/toolchain/opt/bin/../lib/gcc/arm-none-eabi/9.2.1/include-fixed -Os -imacros C:/Users/$USER/Tecovan/dev_projects/spi_fujitsu_fram/build/zephyr/include/generated/autoconf.h -ffreestanding -fno-common -g -mcpu=cortex-m4 -mthumb -mabi=aapcs -imacros C:/Users/$USER/ncs/v1.5.1/zephyr/include/toolchain/zephyr_stdint.h -Wall -Wformat -Wformat-security -Wno-format-zero-length -Wno-main -Wno-pointer-sign -Wpointer-arith -Wno-address-of-packed-member -Wno-unused-but-set-variable -Werror=implicit-int -fno-asynchronous-unwind-tables -fno-pie -fno-pic -fno-strict-overflow -fno-reorder-functions -fno-defer-pop -fmacro-prefix-map=C:/Users/$USER/Tecovan/dev_projects/spi_fujitsu_fram=CMAKE_SOURCE_DIR -fmacro-prefix-map=C:/Users/$USER/ncs/v1.5.1/zephyr=ZEPHYR_BASE -fmacro-prefix-map=C:/Users/$USER/ncs/v1.5.1=WEST_TOPDIR -ffunction-sections -fdata-sections -std=c99 -nostdinc -MD -MT CMakeFiles/app.dir/src/main.c.obj -MF CMakeFiles\app.dir\src\main.c.obj.d -o CMakeFiles/app.dir/src/main.c.obj -c ../src/main.c
In file included from C:/Users/$USER/ncs/v1.5.1/zephyr/include/arch/arm/aarch32/arch.h:20,
from C:/Users/$USER/ncs/v1.5.1/zephyr/include/arch/cpu.h:19,
from C:/Users/$USER/ncs/v1.5.1/zephyr/include/kernel_includes.h:33,
from C:/Users/$USER/ncs/v1.5.1/zephyr/include/kernel.h:17,
from C:/Users/$USER/ncs/v1.5.1/zephyr/include/zephyr.h:18,
from ../src/main.c:8:
../src/main.c: In function 'main':
C:/Users/$USER/ncs/v1.5.1/zephyr/include/devicetree.h:208:32: error: 'DT_N_ALIAS_spi_1_P_label' undeclared (first use in this function)
208 | #define DT_ALIAS(alias) DT_CAT(DT_N_ALIAS_, alias)
| ^~~~~~~~~~~
C:/Users/$USER/ncs/v1.5.1/zephyr/include/devicetree.h:2176:24: note: in definition of macro 'DT_CAT'
2176 | #define DT_CAT(a1, a2) a1 ## a2
| ^~
C:/Users/$USER/ncs/v1.5.1/zephyr/include/devicetree.h:584:27: note: in expansion of macro 'DT_PROP'
584 | #define DT_LABEL(node_id) DT_PROP(node_id, label)
| ^~~~~~~
../src/main.c:23:17: note: in expansion of macro 'DT_LABEL'
23 | #define SPI_DEV DT_LABEL(DT_ALIAS(spi_1))
| ^~~~~~~~
C:/Users/$USER/ncs/v1.5.1/zephyr/include/devicetree.h:208:25: note: in expansion of macro 'DT_CAT'
208 | #define DT_ALIAS(alias) DT_CAT(DT_N_ALIAS_, alias)
| ^~~~~~
../src/main.c:23:26: note: in expansion of macro 'DT_ALIAS'
23 | #define SPI_DEV DT_LABEL(DT_ALIAS(spi_1))
| ^~~~~~~~
../src/main.c:150:27: note: in expansion of macro 'SPI_DEV'
150 | spi = device_get_binding(SPI_DEV);
| ^~~~~~~
C:/Users/$USER/ncs/v1.5.1/zephyr/include/devicetree.h:208:32: note: each undeclared identifier is reported only once for each function it appears in
208 | #define DT_ALIAS(alias) DT_CAT(DT_N_ALIAS_, alias)
| ^~~~~~~~~~~
C:/Users/$USER/ncs/v1.5.1/zephyr/include/devicetree.h:2176:24: note: in definition of macro 'DT_CAT'
2176 | #define DT_CAT(a1, a2) a1 ## a2
| ^~
C:/Users/$USER/ncs/v1.5.1/zephyr/include/devicetree.h:584:27: note: in expansion of macro 'DT_PROP'
584 | #define DT_LABEL(node_id) DT_PROP(node_id, label)
| ^~~~~~~
../src/main.c:23:17: note: in expansion of macro 'DT_LABEL'
23 | #define SPI_DEV DT_LABEL(DT_ALIAS(spi_1))
| ^~~~~~~~
C:/Users/$USER/ncs/v1.5.1/zephyr/include/devicetree.h:208:25: note: in expansion of macro 'DT_CAT'
208 | #define DT_ALIAS(alias) DT_CAT(DT_N_ALIAS_, alias)
| ^~~~~~
../src/main.c:23:26: note: in expansion of macro 'DT_ALIAS'
23 | #define SPI_DEV DT_LABEL(DT_ALIAS(spi_1))
| ^~~~~~~~
../src/main.c:150:27: note: in expansion of macro 'SPI_DEV'
150 | spi = device_get_binding(SPI_DEV);
| ^~~~~~~
[76/141] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/crc8_sw.c.obj
[77/141] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/crc16_sw.c.obj
[78/141] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/hex.c.obj
[79/141] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/crc7_sw.c.obj
[80/141] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/dec.c.obj
[81/141] Linking C static library zephyr\kernel\libkernel.a
[82/141] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/fdtable.c.obj
[83/141] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/timeutil.c.obj
[84/141] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/sem.c.obj
ninja: build stopped: subcommand failed.
FATAL ERROR: command exited with status 1: 'C:\Users\$USER\ncs\v1.5.1\toolchain\opt\bin\cmake.EXE' --build 'C:\Users\$USER\Tecovan\dev_projects\spi_fujitsu_fram\build'
Here are my project files:
nrf52833dk_nrf52833.overlay :
&spi1 {
compatible = "nordic,nrf-spim";
status = "okay";
mosi-pin = <10>;
miso-pin = <7>;
sck-pin = <9>;
cs-gpios = <&gpio0 22 0>;
label = "MB85RS64V";
//spi-max-frequency = <4000000>;
};prj.conf :
CONFIG_STDOUT_CONSOLE=y CONFIG_PRINTK=y CONFIG_SPI=y #CONFIG_SPI_1=y #CONFIG_SPI_NRFX=y CONFIG_GPIO=y CONFIG_MAIN_STACK_SIZE=4096
main.c :
/*
* Copyright (c) 2016 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <errno.h>
#include <zephyr.h>
#include <sys/printk.h>
#include <device.h>
#include <drivers/spi.h>
/**
* @file Sample app using the Fujitsu MB85RS64V FRAM through SPI.
*/
#define MB85RS64V_MANUFACTURER_ID_CMD 0x9f
#define MB85RS64V_WRITE_ENABLE_CMD 0x06
#define MB85RS64V_READ_CMD 0x03
#define MB85RS64V_WRITE_CMD 0x02
#define MAX_USER_DATA_LENGTH 1024
static uint8_t data[MAX_USER_DATA_LENGTH], cmp_data[MAX_USER_DATA_LENGTH];
static int mb85rs64v_access(const struct device *spi,
struct spi_config *spi_cfg,
uint8_t cmd, uint16_t addr, void *data, size_t len)
{
uint8_t access[3];
struct spi_buf bufs[] = {
{
.buf = access,
},
{
.buf = data,
.len = len
}
};
struct spi_buf_set tx = {
.buffers = bufs
};
access[0] = cmd;
if (cmd == MB85RS64V_WRITE_CMD || cmd == MB85RS64V_READ_CMD) {
access[1] = (addr >> 8) & 0xFF;
access[2] = addr & 0xFF;
bufs[0].len = 3;
tx.count = 2;
if (cmd == MB85RS64V_READ_CMD) {
struct spi_buf_set rx = {
.buffers = bufs,
.count = 2
};
return spi_transceive(spi, spi_cfg, &tx, &rx);
}
} else {
tx.count = 1;
}
return spi_write(spi, spi_cfg, &tx);
}
static int mb85rs64v_read_id(const struct device *spi,
struct spi_config *spi_cfg)
{
uint8_t id[4];
int err;
err = mb85rs64v_access(spi, spi_cfg,
MB85RS64V_MANUFACTURER_ID_CMD, 0, &id, 4);
if (err) {
printk("Error during ID read\n");
return -EIO;
}
if (id[0] != 0x04) {
return -EIO;
}
if (id[1] != 0x7f) {
return -EIO;
}
if (id[2] != 0x03) {
return -EIO;
}
if (id[3] != 0x02) {
return -EIO;
}
return 0;
}
static int write_bytes(const struct device *spi, struct spi_config *spi_cfg,
uint16_t addr, uint8_t *data, uint32_t num_bytes)
{
int err;
/* disable write protect */
err = mb85rs64v_access(spi, spi_cfg,
MB85RS64V_WRITE_ENABLE_CMD, 0, NULL, 0);
if (err) {
printk("unable to disable write protect\n");
return -EIO;
}
/* write cmd */
err = mb85rs64v_access(spi, spi_cfg,
MB85RS64V_WRITE_CMD, addr, data, num_bytes);
if (err) {
printk("Error during SPI write\n");
return -EIO;
}
return 0;
}
static int read_bytes(const struct device *spi, struct spi_config *spi_cfg,
uint16_t addr, uint8_t *data, uint32_t num_bytes)
{
int err;
/* read cmd */
err = mb85rs64v_access(spi, spi_cfg,
MB85RS64V_READ_CMD, addr, data, num_bytes);
if (err) {
printk("Error during SPI read\n");
return -EIO;
}
return 0;
}
void main(void)
{
const struct device *spi;
struct spi_config spi_cfg = {0};
int err;
printk("fujitsu FRAM example application\n");
spi = device_get_binding(DT_LABEL(DT_ALIAS(spi_1)));
if (!spi) {
printk("Could not find SPI driver\n");
return;
}
spi_cfg.operation = SPI_WORD_SET(8);
spi_cfg.frequency = 256000U;
err = mb85rs64v_read_id(spi, &spi_cfg);
if (err) {
printk("Could not verify FRAM ID\n");
return;
}
/* Do one-byte read/write */
data[0] = 0xAE;
err = write_bytes(spi, &spi_cfg, 0x00, data, 1);
if (err) {
printk("Error writing to FRAM! errro code (%d)\n", err);
return;
} else {
printk("Wrote 0xAE to address 0x00.\n");
}
data[0] = 0x86;
err = write_bytes(spi, &spi_cfg, 0x01, data, 1);
if (err) {
printk("Error writing to FRAM! error code (%d)\n", err);
return;
} else {
printk("Wrote 0x86 to address 0x01.\n");
}
data[0] = 0x00;
err = read_bytes(spi, &spi_cfg, 0x00, data, 1);
if (err) {
printk("Error reading from FRAM! error code (%d)\n", err);
return;
} else {
printk("Read 0x%X from address 0x00.\n", data[0]);
}
data[0] = 0x00;
err = read_bytes(spi, &spi_cfg, 0x01, data, 1);
if (err) {
printk("Error reading from FRAM! error code (%d)\n", err);
return;
} else {
printk("Read 0x%X from address 0x01.\n", data[0]);
}
/* Do multi-byte read/write */
/* get some random data, and clear out data[] */
for (uint32_t i = 0; i < sizeof(cmp_data); i++) {
cmp_data[i] = k_cycle_get_32() & 0xFF;
data[i] = 0x00;
}
/* write them to the FRAM */
err = write_bytes(spi, &spi_cfg, 0x00, cmp_data, sizeof(cmp_data));
if (err) {
printk("Error writing to FRAM! error code (%d)\n", err);
return;
} else {
printk("Wrote %d bytes to address 0x00.\n",
(uint32_t) sizeof(cmp_data));
}
err = read_bytes(spi, &spi_cfg, 0x00, data, sizeof(data));
if (err) {
printk("Error reading from FRAM! error code (%d)\n", err);
return;
} else {
printk("Read %d bytes from address 0x00.\n",
(uint32_t) sizeof(data));
}
err = 0;
for (uint32_t i = 0; i < sizeof(cmp_data); i++) {
if (cmp_data[i] != data[i]) {
printk("Data comparison failed @ %d.\n", i);
err = -EIO;
}
}
if (err == 0) {
printk("Data comparison successful.\n");
}
}
zephyr.dts :
/dts-v1/;
/ {
#address-cells = < 0x1 >;
#size-cells = < 0x1 >;
model = "Nordic nRF52833 DK NRF52833";
compatible = "nordic,nrf52833-dk-nrf52833";
chosen {
zephyr,entropy = &rng;
zephyr,flash-controller = &flash_controller;
zephyr,console = &uart0;
zephyr,shell-uart = &uart0;
zephyr,uart-mcumgr = &uart0;
zephyr,bt-mon-uart = &uart0;
zephyr,bt-c2h-uart = &uart0;
zephyr,sram = &sram0;
zephyr,flash = &flash0;
zephyr,code-partition = &slot0_partition;
};
aliases {
led0 = &led0;
led1 = &led1;
led2 = &led2;
led3 = &led3;
pwm-led0 = &pwm_led0;
sw0 = &button0;
sw1 = &button1;
sw2 = &button2;
sw3 = &button3;
};
soc {
#address-cells = < 0x1 >;
#size-cells = < 0x1 >;
compatible = "nordic,nRF52833-QIAA", "nordic,nRF52833", "nordic,nRF52", "simple-bus";
interrupt-parent = < &nvic >;
ranges;
nvic: interrupt-controller@e000e100 {
compatible = "arm,v7m-nvic";
reg = < 0xe000e100 0xc00 >;
interrupt-controller;
#interrupt-cells = < 0x2 >;
arm,num-irq-priority-bits = < 0x3 >;
phandle = < 0x1 >;
};
systick: timer@e000e010 {
compatible = "arm,armv7m-systick";
reg = < 0xe000e010 0x10 >;
status = "disabled";
};
flash_controller: flash-controller@4001e000 {
compatible = "nordic,nrf52-flash-controller";
reg = < 0x4001e000 0x1000 >;
#address-cells = < 0x1 >;
#size-cells = < 0x1 >;
label = "NRF_FLASH_DRV_NAME";
flash0: flash@0 {
compatible = "soc-nv-flash";
label = "NRF_FLASH";
erase-block-size = < 0x1000 >;
write-block-size = < 0x4 >;
reg = < 0x0 0x80000 >;
partitions {
compatible = "fixed-partitions";
#address-cells = < 0x1 >;
#size-cells = < 0x1 >;
boot_partition: partition@0 {
label = "mcuboot";
reg = < 0x0 0xc000 >;
};
slot0_partition: partition@c000 {
label = "image-0";
reg = < 0xc000 0x32000 >;
};
slot1_partition: partition@3e000 {
label = "image-1";
reg = < 0x3e000 0x32000 >;
};
scratch_partition: partition@70000 {
label = "image-scratch";
reg = < 0x70000 0xa000 >;
};
storage_partition: partition@7a000 {
label = "storage";
reg = < 0x7a000 0x6000 >;
};
};
};
};
sram0: memory@20000000 {
compatible = "mmio-sram";
reg = < 0x20000000 0x20000 >;
};
adc: adc@40007000 {
compatible = "nordic,nrf-saadc";
reg = < 0x40007000 0x1000 >;
interrupts = < 0x7 0x1 >;
status = "okay";
label = "ADC_0";
#io-channel-cells = < 0x1 >;
};
clock: clock@40000000 {
compatible = "nordic,nrf-clock";
reg = < 0x40000000 0x1000 >;
interrupts = < 0x0 0x1 >;
status = "okay";
label = "CLOCK";
};
ecb: ecb@4000e000 {
compatible = "nordic,nrf-ecb";
reg = < 0x4000e000 0x1000 >;
interrupts = < 0xe 0x1 >;
status = "okay";
label = "ECB";
};
uart0: uart@40002000 {
reg = < 0x40002000 0x1000 >;
interrupts = < 0x2 0x1 >;
status = "okay";
label = "UART_0";
compatible = "nordic,nrf-uarte";
current-speed = < 0x1c200 >;
tx-pin = < 0x6 >;
rx-pin = < 0x8 >;
rts-pin = < 0x5 >;
cts-pin = < 0x7 >;
};
uart1: arduino_serial: uart@40028000 {
compatible = "nordic,nrf-uarte";
reg = < 0x40028000 0x1000 >;
interrupts = < 0x28 0x1 >;
status = "okay";
label = "UART_1";
current-speed = < 0x1c200 >;
rx-pin = < 0x21 >;
tx-pin = < 0x22 >;
};
gpiote: gpiote@40006000 {
compatible = "nordic,nrf-gpiote";
reg = < 0x40006000 0x1000 >;
interrupts = < 0x6 0x5 >;
status = "okay";
label = "GPIOTE_0";
};
gpio0: gpio@50000000 {
compatible = "nordic,nrf-gpio";
gpio-controller;
reg = < 0x50000000 0x200 0x50000500 0x300 >;
#gpio-cells = < 0x2 >;
label = "GPIO_0";
status = "okay";
port = < 0x0 >;
phandle = < 0x2 >;
};
gpio1: gpio@50000300 {
compatible = "nordic,nrf-gpio";
gpio-controller;
reg = < 0x50000300 0x200 0x50000800 0x300 >;
#gpio-cells = < 0x2 >;
ngpios = < 0xa >;
label = "GPIO_1";
status = "okay";
port = < 0x1 >;
phandle = < 0x6 >;
};
i2c0: arduino_i2c: i2c@40003000 {
#address-cells = < 0x1 >;
#size-cells = < 0x0 >;
reg = < 0x40003000 0x1000 >;
clock-frequency = < 0x186a0 >;
interrupts = < 0x3 0x1 >;
status = "okay";
label = "I2C_0";
compatible = "nordic,nrf-twi";
sda-pin = < 0x1a >;
scl-pin = < 0x1b >;
};
i2c1: i2c@40004000 {
#address-cells = < 0x1 >;
#size-cells = < 0x0 >;
reg = < 0x40004000 0x1000 >;
clock-frequency = < 0x186a0 >;
interrupts = < 0x4 0x1 >;
status = "disabled";
label = "I2C_1";
compatible = "nordic,nrf-twi";
sda-pin = < 0x1e >;
scl-pin = < 0x1f >;
};
pwm0: pwm@4001c000 {
compatible = "nordic,nrf-pwm";
reg = < 0x4001c000 0x1000 >;
interrupts = < 0x1c 0x1 >;
status = "okay";
label = "PWM_0";
#pwm-cells = < 0x1 >;
ch0-pin = < 0xd >;
ch0-inverted;
phandle = < 0x5 >;
};
pwm1: pwm@40021000 {
compatible = "nordic,nrf-pwm";
reg = < 0x40021000 0x1000 >;
interrupts = < 0x21 0x1 >;
status = "disabled";
label = "PWM_1";
#pwm-cells = < 0x1 >;
};
pwm2: pwm@40022000 {
compatible = "nordic,nrf-pwm";
reg = < 0x40022000 0x1000 >;
interrupts = < 0x22 0x1 >;
status = "disabled";
label = "PWM_2";
#pwm-cells = < 0x1 >;
};
pwm3: pwm@4002d000 {
compatible = "nordic,nrf-pwm";
reg = < 0x4002d000 0x1000 >;
interrupts = < 0x2d 0x1 >;
status = "disabled";
label = "PWM_3";
#pwm-cells = < 0x1 >;
};
qdec: qdec@40012000 {
compatible = "nordic,nrf-qdec";
reg = < 0x40012000 0x1000 >;
interrupts = < 0x12 0x1 >;
status = "disabled";
label = "QDEC";
};
rng: random@4000d000 {
compatible = "nordic,nrf-rng";
reg = < 0x4000d000 0x1000 >;
interrupts = < 0xd 0x1 >;
status = "okay";
label = "RNG";
};
spi0: spi@40003000 {
#address-cells = < 0x1 >;
#size-cells = < 0x0 >;
reg = < 0x40003000 0x1000 >;
interrupts = < 0x3 0x1 >;
status = "disabled";
label = "SPI_0";
compatible = "nordic,nrf-spi";
sck-pin = < 0x1b >;
mosi-pin = < 0x1a >;
miso-pin = < 0x1d >;
};
spi1: spi@40004000 {
#address-cells = < 0x1 >;
#size-cells = < 0x0 >;
reg = < 0x40004000 0x1000 >;
interrupts = < 0x4 0x1 >;
status = "okay";
label = "MB85RS64V";
compatible = "nordic,nrf-spim";
sck-pin = < 0x9 >;
mosi-pin = < 0xa >;
miso-pin = < 0x7 >;
cs-gpios = < &gpio0 0x16 0x0 >;
};
spi2: spi@40023000 {
#address-cells = < 0x1 >;
#size-cells = < 0x0 >;
reg = < 0x40023000 0x1000 >;
interrupts = < 0x23 0x1 >;
status = "disabled";
label = "SPI_2";
};
spi3: arduino_spi: spi@4002f000 {
compatible = "nordic,nrf-spim";
#address-cells = < 0x1 >;
#size-cells = < 0x0 >;
reg = < 0x4002f000 0x1000 >;
interrupts = < 0x2f 0x1 >;
status = "okay";
label = "SPI_3";
sck-pin = < 0x17 >;
miso-pin = < 0x16 >;
mosi-pin = < 0x15 >;
cs-gpios = < &arduino_header 0x10 0x1 >;
};
rtc0: rtc@4000b000 {
compatible = "nordic,nrf-rtc";
reg = < 0x4000b000 0x1000 >;
cc-num = < 0x3 >;
interrupts = < 0xb 0x1 >;
status = "okay";
clock-frequency = < 0x8000 >;
prescaler = < 0x1 >;
label = "RTC_0";
};
rtc1: rtc@40011000 {
compatible = "nordic,nrf-rtc";
reg = < 0x40011000 0x1000 >;
cc-num = < 0x4 >;
interrupts = < 0x11 0x1 >;
status = "okay";
clock-frequency = < 0x8000 >;
prescaler = < 0x1 >;
label = "RTC_1";
};
rtc2: rtc@40024000 {
compatible = "nordic,nrf-rtc";
reg = < 0x40024000 0x1000 >;
cc-num = < 0x4 >;
interrupts = < 0x24 0x1 >;
status = "okay";
clock-frequency = < 0x8000 >;
prescaler = < 0x1 >;
label = "RTC_2";
};
timer0: timer@40008000 {
compatible = "nordic,nrf-timer";
status = "okay";
reg = < 0x40008000 0x1000 >;
cc-num = < 0x4 >;
interrupts = < 0x8 0x1 >;
prescaler = < 0x0 >;
label = "TIMER_0";
};
timer1: timer@40009000 {
compatible = "nordic,nrf-timer";
status = "okay";
reg = < 0x40009000 0x1000 >;
cc-num = < 0x4 >;
interrupts = < 0x9 0x1 >;
prescaler = < 0x0 >;
label = "TIMER_1";
};
timer2: timer@4000a000 {
compatible = "nordic,nrf-timer";
status = "okay";
reg = < 0x4000a000 0x1000 >;
cc-num = < 0x4 >;
interrupts = < 0xa 0x1 >;
prescaler = < 0x0 >;
label = "TIMER_2";
phandle = < 0x4 >;
};
timer3: timer@4001a000 {
compatible = "nordic,nrf-timer";
status = "okay";
reg = < 0x4001a000 0x1000 >;
cc-num = < 0x6 >;
interrupts = < 0x1a 0x1 >;
prescaler = < 0x0 >;
label = "TIMER_3";
};
timer4: timer@4001b000 {
compatible = "nordic,nrf-timer";
status = "okay";
reg = < 0x4001b000 0x1000 >;
cc-num = < 0x6 >;
interrupts = < 0x1b 0x1 >;
prescaler = < 0x0 >;
label = "TIMER_4";
};
temp: temp@4000c000 {
compatible = "nordic,nrf-temp";
reg = < 0x4000c000 0x1000 >;
interrupts = < 0xc 0x1 >;
status = "okay";
label = "TEMP_0";
};
usbd: usbd@40027000 {
compatible = "nordic,nrf-usbd";
reg = < 0x40027000 0x1000 >;
interrupts = < 0x27 0x1 >;
num-bidir-endpoints = < 0x1 >;
num-in-endpoints = < 0x7 >;
num-out-endpoints = < 0x7 >;
num-isoin-endpoints = < 0x1 >;
num-isoout-endpoints = < 0x1 >;
status = "okay";
label = "USBD";
};
wdt: wdt0: watchdog@40010000 {
compatible = "nordic,nrf-watchdog";
reg = < 0x40010000 0x1000 >;
interrupts = < 0x10 0x1 >;
status = "okay";
label = "WDT";
};
ficr: ficr@10000000 {
compatible = "nordic,nrf-ficr";
reg = < 0x10000000 0x1000 >;
status = "okay";
};
uicr: uicr@10001000 {
compatible = "nordic,nrf-uicr";
reg = < 0x10001000 0x1000 >;
status = "okay";
};
radio: radio@40001000 {
compatible = "nordic,nrf-radio";
reg = < 0x40001000 0x1000 >;
interrupts = < 0x1 0x1 >;
status = "okay";
dfe-ant-num = < 0x0 >;
};
};
cpus {
#address-cells = < 0x1 >;
#size-cells = < 0x0 >;
cpu@0 {
device_type = "cpu";
compatible = "arm,cortex-m4f";
reg = < 0x0 >;
};
};
sw_pwm: sw-pwm {
compatible = "nordic,nrf-sw-pwm";
status = "disabled";
label = "SW_PWM";
generator = < &timer2 >;
channel-count = < 0x3 >;
clock-prescaler = < 0x0 >;
ppi-base = < 0x0 >;
gpiote-base = < 0x0 >;
#pwm-cells = < 0x1 >;
};
leds {
compatible = "gpio-leds";
led0: led_0 {
gpios = < &gpio0 0xd 0x1 >;
label = "Green LED 0";
};
led1: led_1 {
gpios = < &gpio0 0xe 0x1 >;
label = "Green LED 1";
};
led2: led_2 {
gpios = < &gpio0 0xf 0x1 >;
label = "Green LED 2";
};
led3: led_3 {
gpios = < &gpio0 0x10 0x1 >;
label = "Green LED 3";
};
};
pwmleds {
compatible = "pwm-leds";
pwm_led0: pwm_led_0 {
pwms = < &pwm0 0xd >;
};
};
buttons {
compatible = "gpio-keys";
button0: button_0 {
gpios = < &gpio0 0xb 0x11 >;
label = "Push button switch 0";
};
button1: button_1 {
gpios = < &gpio0 0xc 0x11 >;
label = "Push button switch 1";
};
button2: button_2 {
gpios = < &gpio0 0x18 0x11 >;
label = "Push button switch 2";
};
button3: button_3 {
gpios = < &gpio0 0x19 0x11 >;
label = "Push button switch 3";
};
};
arduino_header: connector {
compatible = "arduino-header-r3";
#gpio-cells = < 0x2 >;
gpio-map-mask = < 0xffffffff 0xffffffc0 >;
gpio-map-pass-thru = < 0x0 0x3f >;
gpio-map = < 0x0 0x0 &gpio0 0x3 0x0 >, < 0x1 0x0 &gpio0 0x4 0x0 >, < 0x2 0x0 &gpio0 0x1c 0x0 >, < 0x3 0x0 &gpio0 0x1d 0x0 >, < 0x4 0x0 &gpio0 0x1e 0x0 >, < 0x5 0x0 &gpio0 0x1f 0x0 >, < 0x6 0x0 &gpio1 0x1 0x0 >, < 0x7 0x0 &gpio1 0x2 0x0 >, < 0x8 0x0 &gpio1 0x3 0x0 >, < 0x9 0x0 &gpio1 0x4 0x0 >, < 0xa 0x0 &gpio1 0x5 0x0 >, < 0xb 0x0 &gpio1 0x6 0x0 >, < 0xc 0x0 &gpio1 0x7 0x0 >, < 0xd 0x0 &gpio1 0x8 0x0 >, < 0xe 0x0 &gpio0 0x11 0x0 >, < 0xf 0x0 &gpio0 0x13 0x0 >, < 0x10 0x0 &gpio0 0x14 0x0 >, < 0x11 0x0 &gpio0 0x15 0x0 >, < 0x12 0x0 &gpio0 0x16 0x0 >, < 0x13 0x0 &gpio0 0x17 0x0 >, < 0x14 0x0 &gpio0 0x1a 0x0 >, < 0x15 0x0 &gpio0 0x1b 0x0 >;
phandle = < 0x3 >;
};
};