aboutsummaryrefslogtreecommitdiff
path: root/targets/mimxrt595_evk/target_docs.rst
blob: 47a9505faa0174b17fe1abe00fffcf9bc228555a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
.. _target-mimxrt595-evk:

-------------
mimxrt595-evk
-------------
The NXP MIMXRT595-EVK_ evaluation board is a demonstration target for on-device
Pigweed development

.. _MIMXRT595-EVK: https://www.nxp.com/design/development-boards/i-mx-evaluation-and-development-boards/i-mx-rt595-evaluation-kit:MIMXRT595-EVK

Configuring
===========
Step 1: Download SDK
--------------------
To configure this Pigweed target you will first need to download an NXP
`MCUXpresso SDK`_ for your device and unpack it within your project source tree.

.. _MCUXpresso SDK: https://mcuxpresso.nxp.com/en/welcome

Step 2: Create SDK source set
-----------------------------
You'll next need to create a source set based on the downloaded SDK, and set
the ``pw_third_party_mcuxpresso_SDK`` build arg to the name of the source set
you create. See :ref:`module-pw_build_mcuxpresso` for more details.

Alternatively to get started you can start with the basic project template by
setting the ``pw_target_mimxrt595_evk_MANIFEST`` build arg to the location of
the manifest file within the unpacked SDK, and then setting the
``pw_third_party_mcuxpresso_SDK`` to the ``sample_sdk`` source set within the
Pigweed target directory.

.. code-block:: sh

  $ gn args out
  # Modify and save the args file to use the sample SDK.
  pw_target_mimxrt595_evk_MANIFEST = "//third_party/mcuxpresso/sdk/EVK-MIMXRT595_manifest_v3_8.xml"
  pw_third_party_mcuxpresso_SDK = "//targets/mimxrt595_evk:sample_sdk"

Building
========
Once configured, to build for this Pigweed target, simply build the top-level
"mimxrt595" Ninja target.

.. code-block:: sh

  $ ninja -C out mimxrt595

Running and Debugging
=====================
First Time Setup
----------------
The MIMXRT595-EVK comes with an integrated Link2 debug probe that can operate in
either CMSIS-DAP or SEGGER J-Link mode. CMSIS-DAP is how the board will likely
come by default, but J-Link is the mode that is currently known to work, so
you'll need to flash the Link2 with the correct firmware.

1. Download and install the LPCScrypt_ utility from the NXP website.

2. Place a jumper over **JP1** (not **J1**). If you're having trouble locating
   this, it's in the top-right of the board in a block of four jumpers closest
   to the USB ports.

3. Connect a USB cable into the top-right USB port (**J40**) and your computer.

4. Run ``scripts/boot_lpcscrypt`` from the LPCScrypt installation.

5. Run ``scripts/program_JLINK`` from the LPCScrypt installation, press the
   *SPACE* key to update the firmware.

6. Unplug the USB cable and remove the **JP1** jumper.

Now is also a good time to download and install the J-Link_ package from the
SEGGER website.

.. _LPCScrypt: https://www.nxp.com/design/microcontrollers-developer-resources/lpcscrypt-v2-1-2:LPCSCRYPT
.. _J-Link: https://www.segger.com/downloads/jlink/

General Setup
-------------
Each time you prepare the MIMXRT595-EVK for use, you'll need to do a few steps.
You don't need to repeat these if you leave everything setup and don't
disconnect or reboot.

1. Ensure the **SW7** DIP switches are set to Off-Off-On (boot from QSPI Flash).

2. Connect a USB cable into the top-right USB port (**J40**) and your computer.

3. Start the J-Link GDB Server and leave this running:

   .. code-block:: sh

     JLinkGDBServer -select USB -device MIMXRT595S -endian little -if SWD -speed 4000 -noir

On Linux, you may need to install the `libncurses5` library to use the tools:

.. code-block:: sh

  sudo apt install libncurses5

Running and Debugging
---------------------
Use ``arm-none-eabi-gdb`` to load an executable into the target, debug, and run
it.

.. code-block::
   :emphasize-lines: 1,6,10,12,20

   (gdb) target remote :2331
   Remote debugging using :2331
   warning: No executable has been specified and target does not support
   determining executable automatically.  Try using the "file" command.
   0x08000000 in ?? ()
   (gdb) file out/mimxrt595_evk_debug/obj/pw_status/test/status_test.elf
   A program is being debugged already.
   Are you sure you want to change the file? (y or n) y
   Reading symbols from out/mimxrt595_evk_debug/obj/pw_status/test/status_test.elf...
   (gdb) monitor reset
   Resetting target
   (gdb) load
   Loading section .flash_config, size 0x200 lma 0x8000400
   Loading section .vector_table, size 0x168 lma 0x8001000
   Loading section .code, size 0xb34c lma 0x8001180
   Loading section .ARM, size 0x8 lma 0x800c4d0
   Loading section .static_init_ram, size 0x3c8 lma 0x800c4d8
   Start address 0x080048d0, load size 47748
   Transfer rate: 15542 KB/sec, 6821 bytes/write.
   (gdb) monitor reset
   Resetting target

You can now set any breakpoints you wish, and ``continue`` to run the
executable.

To reset the target use ``monitor reset``.

To load an updated version of the same file, after resetting the target,
use ``load`` and a second ``monitor reset`` as shown above.

To debug a new file, use ``file`` before ``load``.

Debug console is available on the USB serial port, e.g. ``/dev/ttyACM0``
(Linux) or ``/dev/tty.usbmodem*`` (Mac).