xref: /aosp_15_r20/external/pigweed/targets/apollo4/target_docs.rst (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker.. _target-apollo4:
2*61c4878aSAndroid Build Coastguard Worker
3*61c4878aSAndroid Build Coastguard Worker===========================
4*61c4878aSAndroid Build Coastguard WorkerAmbiq Apollo4
5*61c4878aSAndroid Build Coastguard Worker===========================
6*61c4878aSAndroid Build Coastguard Worker-----
7*61c4878aSAndroid Build Coastguard WorkerSetup
8*61c4878aSAndroid Build Coastguard Worker-----
9*61c4878aSAndroid Build Coastguard WorkerTo use this target, Pigweed must be set up to use the `AmbiqSuite SDK`_ HAL
10*61c4878aSAndroid Build Coastguard Workerfor the Apollo4 series which can be downloaded from the Ambiq website.
11*61c4878aSAndroid Build Coastguard Worker
12*61c4878aSAndroid Build Coastguard Worker.. _AmbiqSuite SDK: https://ambiq.com/apollo4-blue-plus
13*61c4878aSAndroid Build Coastguard Worker
14*61c4878aSAndroid Build Coastguard WorkerOnce the AmbiqSuite SDK package has been downloaded and extracted, the user
15*61c4878aSAndroid Build Coastguard Workerneeds to set ``dir_pw_third_party_ambiq_SDK`` build arg to the location of
16*61c4878aSAndroid Build Coastguard Workerextracted directory:
17*61c4878aSAndroid Build Coastguard Worker
18*61c4878aSAndroid Build Coastguard Worker.. code-block:: sh
19*61c4878aSAndroid Build Coastguard Worker
20*61c4878aSAndroid Build Coastguard Worker   $ gn args out
21*61c4878aSAndroid Build Coastguard Worker
22*61c4878aSAndroid Build Coastguard WorkerThen add the following lines to that text file:
23*61c4878aSAndroid Build Coastguard Worker
24*61c4878aSAndroid Build Coastguard Worker.. code-block::
25*61c4878aSAndroid Build Coastguard Worker
26*61c4878aSAndroid Build Coastguard Worker   # Path to the extracted AmbiqSuite SDK package.
27*61c4878aSAndroid Build Coastguard Worker   dir_pw_third_party_ambiq_SDK = "/path/to/AmbiqSuite_R4.3.0"
28*61c4878aSAndroid Build Coastguard Worker
29*61c4878aSAndroid Build Coastguard WorkerUsage
30*61c4878aSAndroid Build Coastguard Worker=====
31*61c4878aSAndroid Build Coastguard WorkerThe Apollo4 is configured to output logs and test results over the UART to an
32*61c4878aSAndroid Build Coastguard Workeron-board J-Link Debug Probe (Virtual COM Port) at a baud rate of 115200.
33*61c4878aSAndroid Build Coastguard Worker
34*61c4878aSAndroid Build Coastguard WorkerOnce the AmbiqSuite SDK is configured, the unit tests for the Apollo4 board
35*61c4878aSAndroid Build Coastguard Workercan be build with a command:
36*61c4878aSAndroid Build Coastguard Worker
37*61c4878aSAndroid Build Coastguard Worker.. code-block:: sh
38*61c4878aSAndroid Build Coastguard Worker
39*61c4878aSAndroid Build Coastguard Worker   ninja -C out apollo4
40*61c4878aSAndroid Build Coastguard Worker
41*61c4878aSAndroid Build Coastguard WorkerIf using out as a build directory, tests will be located in out/apollo4/obj/[module name]/[test_name].elf.
42*61c4878aSAndroid Build Coastguard Worker
43*61c4878aSAndroid Build Coastguard WorkerFlashing using SEGGER's J-Link
44*61c4878aSAndroid Build Coastguard Worker==============================
45*61c4878aSAndroid Build Coastguard WorkerFlashing the Apollo4 board can be done using the J-Flash Lite GUI program or from
46*61c4878aSAndroid Build Coastguard Workera command line using ``JLinkExe`` program. The latter requires a script which
47*61c4878aSAndroid Build Coastguard Workerdescribes the steps of programming. Here is an example bash script to flash
48*61c4878aSAndroid Build Coastguard Workeran Apollo4 board using ``JLinkExe`` program:
49*61c4878aSAndroid Build Coastguard Worker
50*61c4878aSAndroid Build Coastguard Worker.. code-block:: sh
51*61c4878aSAndroid Build Coastguard Worker
52*61c4878aSAndroid Build Coastguard Worker   #!/bin/bash
53*61c4878aSAndroid Build Coastguard Worker   function flash_jlink()
54*61c4878aSAndroid Build Coastguard Worker   {
55*61c4878aSAndroid Build Coastguard Worker      local TMP_FLASH_SCRIPT=/tmp/gdb-flash.txt
56*61c4878aSAndroid Build Coastguard Worker
57*61c4878aSAndroid Build Coastguard Worker      cat > $TMP_FLASH_SCRIPT <<- EOF
58*61c4878aSAndroid Build Coastguard Worker         r
59*61c4878aSAndroid Build Coastguard Worker         h
60*61c4878aSAndroid Build Coastguard Worker         loadfile $1
61*61c4878aSAndroid Build Coastguard Worker         r
62*61c4878aSAndroid Build Coastguard Worker         q
63*61c4878aSAndroid Build Coastguard Worker      EOF
64*61c4878aSAndroid Build Coastguard Worker
65*61c4878aSAndroid Build Coastguard Worker      JLinkExe -NoGui 1 -device AMAP42KK-KBR -if SWD -speed 4000 -autoconnect 1 -CommanderScript $TMP_FLASH_SCRIPT
66*61c4878aSAndroid Build Coastguard Worker
67*61c4878aSAndroid Build Coastguard Worker      rm "$TMP_FLASH_SCRIPT"
68*61c4878aSAndroid Build Coastguard Worker   }
69*61c4878aSAndroid Build Coastguard Worker
70*61c4878aSAndroid Build Coastguard Worker   flash_jlink $@
71*61c4878aSAndroid Build Coastguard Worker
72*61c4878aSAndroid Build Coastguard WorkerThen call this script:
73*61c4878aSAndroid Build Coastguard Worker
74*61c4878aSAndroid Build Coastguard Worker.. code-block:: sh
75*61c4878aSAndroid Build Coastguard Worker
76*61c4878aSAndroid Build Coastguard Worker   bash ./flash_amap4.sh ./out/apollo4_debug/obj/pw_log/test/basic_log_test.elf
77*61c4878aSAndroid Build Coastguard Worker
78*61c4878aSAndroid Build Coastguard WorkerIn this case the basic log test is debugged, but substitute your own ELF file.
79*61c4878aSAndroid Build Coastguard Worker
80*61c4878aSAndroid Build Coastguard WorkerDebugging
81*61c4878aSAndroid Build Coastguard Worker=========
82*61c4878aSAndroid Build Coastguard WorkerDebugging can be done using the on-board J-Link Debug Probe. First you need to
83*61c4878aSAndroid Build Coastguard Workerstart ``JLinkGDBServer`` and connect to the on-board J-Link Debug Probe.
84*61c4878aSAndroid Build Coastguard Worker
85*61c4878aSAndroid Build Coastguard Worker.. code-block:: sh
86*61c4878aSAndroid Build Coastguard Worker
87*61c4878aSAndroid Build Coastguard Worker   JLinkGDBServer -select USB      \
88*61c4878aSAndroid Build Coastguard Worker             -device AMAP42KK-KBR  \
89*61c4878aSAndroid Build Coastguard Worker             -endian little        \
90*61c4878aSAndroid Build Coastguard Worker             -if SWD               \
91*61c4878aSAndroid Build Coastguard Worker             -speed 4000           \
92*61c4878aSAndroid Build Coastguard Worker             -noir -LocalhostOnly  \
93*61c4878aSAndroid Build Coastguard Worker             -singlerun            \
94*61c4878aSAndroid Build Coastguard Worker             -nogui                \
95*61c4878aSAndroid Build Coastguard Worker             -excdbg               \
96*61c4878aSAndroid Build Coastguard Worker             -rtos GDBServer/RTOSPlugin_FreeRTOS.dylib
97*61c4878aSAndroid Build Coastguard Worker
98*61c4878aSAndroid Build Coastguard WorkerThe ``-rtos`` option is for `Thread Aware Debugging`_.
99*61c4878aSAndroid Build Coastguard Worker
100*61c4878aSAndroid Build Coastguard Worker.. _Thread Aware Debugging: https://www.segger.com/products/debug-probes/j-link/tools/j-link-gdb-server/thread-aware-debugging/
101*61c4878aSAndroid Build Coastguard Worker
102*61c4878aSAndroid Build Coastguard WorkerThen on the second terminal window use ``arm-none-eabi-gdb`` to load an executable
103*61c4878aSAndroid Build Coastguard Workerinto the target, debug, and run it.
104*61c4878aSAndroid Build Coastguard Worker
105*61c4878aSAndroid Build Coastguard Worker.. code-block:: sh
106*61c4878aSAndroid Build Coastguard Worker
107*61c4878aSAndroid Build Coastguard Worker   arm-none-eabi-gdb -q out/apollo4_debug/obj/pw_log/test/basic_log_test.elf
108*61c4878aSAndroid Build Coastguard Worker
109*61c4878aSAndroid Build Coastguard WorkerThis can be combined with a simple bash script. Here is an example of one:
110*61c4878aSAndroid Build Coastguard Worker
111*61c4878aSAndroid Build Coastguard Worker.. code-block:: sh
112*61c4878aSAndroid Build Coastguard Worker
113*61c4878aSAndroid Build Coastguard Worker   #!/bin/bash
114*61c4878aSAndroid Build Coastguard Worker
115*61c4878aSAndroid Build Coastguard Worker   function debug_jlink()
116*61c4878aSAndroid Build Coastguard Worker   {
117*61c4878aSAndroid Build Coastguard Worker      local TMP_GDB_SCRIPT=/tmp/gdb-debug.txt
118*61c4878aSAndroid Build Coastguard Worker
119*61c4878aSAndroid Build Coastguard Worker      # Create GDB script.
120*61c4878aSAndroid Build Coastguard Worker
121*61c4878aSAndroid Build Coastguard Worker      cat > $TMP_GDB_SCRIPT <<- EOF
122*61c4878aSAndroid Build Coastguard Worker
123*61c4878aSAndroid Build Coastguard Worker      # Backtrace all threads.
124*61c4878aSAndroid Build Coastguard Worker
125*61c4878aSAndroid Build Coastguard Worker      define btall
126*61c4878aSAndroid Build Coastguard Worker        thread apply all backtrace
127*61c4878aSAndroid Build Coastguard Worker      end
128*61c4878aSAndroid Build Coastguard Worker
129*61c4878aSAndroid Build Coastguard Worker      target remote localhost:2331
130*61c4878aSAndroid Build Coastguard Worker      load
131*61c4878aSAndroid Build Coastguard Worker      monitor reset
132*61c4878aSAndroid Build Coastguard Worker      monitor halt
133*61c4878aSAndroid Build Coastguard Worker      b pw_boot_Entry
134*61c4878aSAndroid Build Coastguard Worker
135*61c4878aSAndroid Build Coastguard Worker      EOF
136*61c4878aSAndroid Build Coastguard Worker
137*61c4878aSAndroid Build Coastguard Worker      # Start GDB server.
138*61c4878aSAndroid Build Coastguard Worker
139*61c4878aSAndroid Build Coastguard Worker      set -m
140*61c4878aSAndroid Build Coastguard Worker      JLinkGDBServer -select USB       \
141*61c4878aSAndroid Build Coastguard Worker                 -device AMAP42KK-KBR  \
142*61c4878aSAndroid Build Coastguard Worker                 -endian little        \
143*61c4878aSAndroid Build Coastguard Worker                 -if SWD               \
144*61c4878aSAndroid Build Coastguard Worker                 -speed 4000           \
145*61c4878aSAndroid Build Coastguard Worker                 -noir -LocalhostOnly  \
146*61c4878aSAndroid Build Coastguard Worker                 -singlerun            \
147*61c4878aSAndroid Build Coastguard Worker                 -nogui                \
148*61c4878aSAndroid Build Coastguard Worker                 -excdbg               \
149*61c4878aSAndroid Build Coastguard Worker                 -rtos GDBServer/RTOSPlugin_FreeRTOS.dylib &
150*61c4878aSAndroid Build Coastguard Worker      set +m
151*61c4878aSAndroid Build Coastguard Worker
152*61c4878aSAndroid Build Coastguard Worker      # Debug program.
153*61c4878aSAndroid Build Coastguard Worker
154*61c4878aSAndroid Build Coastguard Worker      arm-none-eabi-gdb -q $1 -x $TMP_GDB_SCRIPT
155*61c4878aSAndroid Build Coastguard Worker
156*61c4878aSAndroid Build Coastguard Worker      rm "$TMP_GDB_SCRIPT"
157*61c4878aSAndroid Build Coastguard Worker   }
158*61c4878aSAndroid Build Coastguard Worker
159*61c4878aSAndroid Build Coastguard Worker   debug_jlink $@
160*61c4878aSAndroid Build Coastguard Worker
161*61c4878aSAndroid Build Coastguard WorkerThen call this script:
162*61c4878aSAndroid Build Coastguard Worker
163*61c4878aSAndroid Build Coastguard Worker.. code-block:: sh
164*61c4878aSAndroid Build Coastguard Worker
165*61c4878aSAndroid Build Coastguard Worker   bash ./debug_amap4.sh ./out/apollo4_debug/obj/pw_log/test/basic_log_test.elf
166