comparison doc/Calypso-chip-versions @ 446:a449ae0a1cec

better documentation for calversion
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 29 Dec 2018 06:59:27 +0000
parents
children
comparison
equal deleted inserted replaced
445:6b20d68a2a88 446:a449ae0a1cec
1 There have been many different versions of the Calypso silicon made over the
2 years, including hardware differences, at least 3 ARM boot ROM versions and at
3 least 3 DSP ROM versions. New target utility calversion (to be run via fc-iram)
4 helps identify unknown Calypso chip versions: it reports the ARM boot ROM
5 version, the DSP ROM version and the values read from the few documented ID
6 registers.
7
8 In order to be able to use our calversion utility to identify an unknown Calypso
9 variant, the Calypso device under examination needs to satisfy the following
10 two requirements:
11
12 * The boot ROM needs to be enabled by nIBOOT pin strapping on the board, in
13 order to be able to get in with fc-iram;
14
15 * The Calypso chip version to be identified needs to be Calypso C05 rev B or
16 later, containing ARM boot ROM version 0200 or 0300. This limitation exists
17 because our target-utils framework on which calversion is based depends on being
18 booted by a known Calypso boot ROM version in order to figure out which UART it
19 should use for communication. If anyone encounters a device with a Calypso C05
20 rev A chip in it, you will need to somehow read out its boot ROM, send us that
21 boot ROM dump, and we will extend our UART detection logic in target-utils to
22 support that ancient boot ROM version which is currently unknown to us.
23
24 If you have a Calypso boot ROM version which is not currently supported by our
25 target-utils, how can you read it out? The simplest way (assuming that nIBOOT
26 is strapped low on the board to enable the boot ROM) would be to edit
27 target-utils/libcommon/uartsel.c in your local copy, hard-code whichever UART
28 you are using in the uart_select_init() function, removing the boot ROM
29 version-dependent autodetection code, rebuild calversion and loadagent with
30 this hack, and use the modified loadagent with fc-loadtool to dump the ROM.
31 Alternatively, if the boot ROM is disabled with nIBOOT strapped high, you may
32 be able to read it out via JTAG, or perhaps via fc-memdump if the device
33 already runs some compatible firmware.
34
35 Back to our calversion utility, if you have a Calypso device with a not-quite-
36 known chip version in it and you are able to get in with fc-loadtool, you can
37 run calversion on it as follows:
38
39 fc-iram /dev/ttyXXX /opt/freecalypso/target-bin/calversion.srec
40
41 You should get output that looks like this:
42
43 Calypso version ID program running
44 Loaded via boot ROM v0300, UART 0 (MODEM) at baud rate #0
45 CLKTCXO input autodetected to be 26 MHz
46 Device ID code: 0xB496
47 Device version code: 0x0000
48 ARM ID code: 0xFFF3
49 cDSP ID code: 0x0128
50 Releasing DSP core from reset
51 Waiting for DSP bootloader READY status
52 Loading NDB parameters
53 Loading PARAM area
54 Booting DSP main code
55 DSP reports version 0x3606 0x0000
56
57 You should be able to see which of the two supported boot ROM versions (0200 or
58 0300) your Calypso chip has, which UART was used to load the code, whether your
59 board uses a 13 MHz or a 26 MHz clock (this is a board-level property, not a
60 property of the Calypso chip), what values are reported in the device ID
61 registers, and the last bit which takes the most work to obtain - the DSP ROM
62 version.
63
64 The boot ROM version and the CLKTCXO input frequency are also reported when you
65 run fc-loadtool, and the device ID registers can be trivially read with the r16
66 command once you are in loadtool, but getting the DSP ROM version requires
67 putting the DSP through its messy boot process, which is why a special program
68 had to be written for the task.