Difference between revisions of "AXIOM Remote/Development"
BAndiT1983 (talk | contribs) |
BAndiT1983 (talk | contribs) |
||
Line 115: | Line 115: | ||
c - continue | c - continue | ||
b PollButtons - set breakpoint to the function PollButtons | b PollButtons - set breakpoint to the function PollButtons | ||
i b - show set breakpoints | |||
del - remove all breakpoints | del - remove all breakpoints | ||
i registers - show available registers and their values | |||
</pre> | </pre> | ||
Revision as of 19:16, 8 July 2021
1 UART Connection
Any UART to USB adapter should work. We use an FT4232H adapter that is available from distributors for around 28€. You require a USB-A to USB-Mini-B cable to connect the FT4232H to your computer and 3 dupont cables to connect the FT4232H to the AXIOM Remote.
1.1 FT4232H Pinout
Chip Datasheet: https://ftdichip.com/wp-content/uploads/2020/08/DS_FT4232H.pdf
Mini Module Datasheet: https://www.ftdichip.com/Support/Documents/DataSheets/Modules/DS_FT4232H_Mini_Module.pdf
1.2 FT4232H wiring
FT4232H features 4 UART ports, in this example we utilize port C. Under Linux the FT4232H should simply show up as ports /dev/ttyUSB0 to /dev/ttyUSB3 where port C from the above example would correspond to /dev/ttyUSB2.
Note that the Transmit (TXD) and Receive (RCD) lines need to be cross wired meaning TXD needs to be connected to RXD and RXD to TXD. You can choose any GND pin though.
Name | FT4232H pin | Remote pin |
---|---|---|
GND | GND | GND |
TXD | CD0 | RXD |
RXD | CD1 | TXD |
2 JTAG connection
2.1 Flashing
It is possible to flash the PIC32 firmware through pic32prog and FT2232H and FT4232H adapters (amongst others, like PICkit3). Multiple devices which use FT2232H are already supported in pic32prog, but not FT4232H. We've forked pic32prog, added FT4232H support and adjusted the build to reduce problems there.
https://github.com/apertus-open-source-cinema/pic32prog
Usage example:
./pic32prog -s 1500 -S AXIOM_Remote_Firmware_635.hex
Output:
Programmer for Microchip PIC32 microcontrollers, Version 2.0.258 Copyright: (C) 2011-2015 Serge Vakulenko IDCODE=5510e053 Adapter: Generic FT4232H adapter Processor: MZ2048ECG100 Flash memory: 2048 kbytes Boot memory: 80 kbytes Data: 135904 bytes Erase: .......done Program flash: ################################## done Program boot: ### done Program rate: 35484 bytes per second
2.2 Debugging
Our tests with OpenOCD and FT4232H were only partially successful, PIC32 could be accessed, resetted and halted, also registers and disassembled code inspected, but breakpoints could not be set properly or were not stopping the execution. Luckily there is a tool called ejtagproxy, which can be used instead of OpenOCD. Also the connection from gdb-multiarch is working properly and breakpoints are stopping the execution.
ejtagproxy supports same devices as pic32prog. We've forked ejtagproxy' too and added FT4232H support.
https://github.com/apertus-open-source-cinema/ejtagproxy
Note: Use gdb-multiarch which is able to debug MIPS targets.
TODO: Add example usage of ejtagproxy and GDB
Start ejtagproxy:
./ejtagproxy
Output:
GDB proxy for Microchip PIC32 processors, Version 1.0.36 Copyright (C) 2012 Serge Vakulenko EJTAGproxy comes with ABSOLUTELY NO WARRANTY; for details use '--warranty' option. This is Open Source software. You are welcome to redistribute it under certain conditions. Use the '--copying' option for details. ejtagproxy: waiting on TCP port 2000
Start gdb-multiarch':
gdb-multiarch
Connect to ejtagproxy:
target extended-remote localhost:2000
or
tar ext :2000
Load symbol file (to be able to set breakpoints via names and not only addresses):
file <path to .elf file>
Example
file /home/dev/Projects/Firmware/build/AXIOM_Remote_Firmware_635.elf
Some useful commands:
r - reset ctrl+c - halt c - continue b PollButtons - set breakpoint to the function PollButtons i b - show set breakpoints del - remove all breakpoints i registers - show available registers and their values
2.3 FT4232H wiring
Name | FT4232H pin | Remote pin |
---|---|---|
GND | GND | GND |
VCC (optional) | 3V3 | 3V3 |
TCK | AD0 | TCK |
TDI | AD1 | TDI |
TDO | AD2 | TDO |
TMS | AD3 | TMS |