Proxmark: Difference between revisions
mNo edit summary |
mNo edit summary |
||
| Line 1: | Line 1: | ||
==Upgrading ELECHOUSE Proxmark3 Easy V3 to 512k== |
==Upgrading ELECHOUSE Proxmark3 Easy V3 to 512k== |
||
===(de)soldering=== |
|||
The popular [https://www.aliexpress.com/popular/proxmark3-kit.html Proxmark3 Easy] has an at91sam7s256 with only 256k and e.g. it's already about 83% full with the current iceman firmware. |
The popular [https://www.aliexpress.com/popular/proxmark3-kit.html Proxmark3 Easy] has an at91sam7s256 with only 256k and e.g. it's already about 83% full with the current iceman firmware. |
||
<br>So I decided to attempt an upgrade. |
<br>So I decided to attempt an upgrade. |
||
| Line 21: | Line 21: | ||
Note that it's maybe easier to solder the new chip not by using flux+solder+iron but [https://www.aliexpress.com/wholesale?SearchText=mechanic+solder+flux solder flux paste] and heating with air gun, as shown [https://www.youtube.com/watch?v=2Z7nCAxS2Rg&t=9m30s in this video]... |
Note that it's maybe easier to solder the new chip not by using flux+solder+iron but [https://www.aliexpress.com/wholesale?SearchText=mechanic+solder+flux solder flux paste] and heating with air gun, as shown [https://www.youtube.com/watch?v=2Z7nCAxS2Rg&t=9m30s in this video]... |
||
===JTAG programming=== |
|||
Then wire your JTAG programmer to the board. Mine is a Segger J-Link. |
Then wire your JTAG programmer to the board. Mine is a Segger J-Link. |
||
<br>To make it easier, solder a [https://www.aliexpress.com/wholesale?SearchText=breakable+single+row+male+curved+header+2.54 breakable single-row male curved header]. |
<br>To make it easier, solder a [https://www.aliexpress.com/wholesale?SearchText=breakable+single+row+male+curved+header+2.54 breakable single-row male curved header]. |
||
| Line 48: | Line 48: | ||
$ apt-get install openocd |
$ apt-get install openocd |
||
There is some doc installed locally: file:///usr/share/doc/openocd/openocd.html/index.html |
|||
Create /etc/udev/rules.d/60-jlink.rules with |
Create /etc/udev/rules.d/60-jlink.rules with |
||
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0101", MODE="664", GROUP="plugdev" |
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0101", MODE="664", GROUP="plugdev" |
||
I created a config file by reusing most of [https://github.com/Proxmark/proxmark3/blob/master/tools/at91sam7s512-buspirate.cfg tools/at91sam7s512-buspirate.cfg], but specific to J-Link instead of buspirate: |
|||
<pre> |
|||
telnet_port 4444 |
|||
gdb_port 3333 |
|||
interface jlink |
|||
transport select jtag |
|||
adapter_khz 1000 |
|||
reset_config srst_only srst_pulls_trst |
|||
jtag newtap sam7x cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id 0x3f0f0f0f |
|||
target create sam7x.cpu arm7tdmi -endian little -chain-position sam7x.cpu |
|||
sam7x.cpu configure -event reset-init { |
|||
soft_reset_halt |
|||
mww 0xfffffd00 0xa5000004 # RSTC_CR: Reset peripherals |
|||
mww 0xfffffd44 0x00008000 # WDT_MR: disable watchdog |
|||
mww 0xfffffd08 0xa5000001 # RSTC_MR enable user reset |
|||
mww 0xfffffc20 0x00005001 # CKGR_MOR : enable the main oscillator |
|||
sleep 10 |
|||
mww 0xfffffc2c 0x000b1c02 # CKGR_PLLR: 16MHz * 12/2 = 96MHz |
|||
sleep 10 |
|||
mww 0xfffffc30 0x00000007 # PMC_MCKR : MCK = PLL / 2 = 48 MHz |
|||
sleep 10 |
|||
mww 0xffffff60 0x00480100 # MC_FMR: flash mode (FWS=1,FMCN=72) |
|||
sleep 100 |
|||
} |
|||
gdb_memory_map enable |
|||
sam7x.cpu configure -work-area-virt 0 -work-area-phys 0x00200000 -work-area-size 0x10000 -work-area-backup 0 |
|||
flash bank sam7x.flash.0 at91sam7 0 0 0 0 sam7x.cpu 0 0 0 0 0 0 0 18432 |
|||
flash bank sam7x.flash.1 at91sam7 0 0 0 0 sam7x.cpu 1 0 0 0 0 0 0 18432 |
|||
</pre> |
|||
Launching OpenOCD: |
|||
<pre> |
|||
$ openocd -f at91sam7s512-jlink.cfg |
|||
Open On-Chip Debugger 0.9.0 (2017-03-07-13:28) |
|||
Licensed under GNU GPL v2 |
|||
For bug reports, read |
|||
http://openocd.org/doc/doxygen/bugs.html |
|||
adapter speed: 1000 kHz |
|||
srst_only srst_pulls_trst srst_gates_jtag srst_open_drain connect_deassert_srst |
|||
Info : J-Link ARM V8 compiled Dec 1 2009 11:42:48 |
|||
Info : J-Link caps 0xb9ff7bbf |
|||
Info : J-Link hw version 80000 |
|||
Info : J-Link hw type J-Link |
|||
Info : J-Link max mem block 9576 |
|||
Info : J-Link configuration |
|||
Info : USB-Address: 0x0 |
|||
Info : Kickstart power on JTAG-pin 19: 0xffffffff |
|||
Info : Vref = 3.332 TCK = 1 TDI = 0 TDO = 0 TMS = 0 SRST = 1 TRST = 1 |
|||
Info : J-Link JTAG Interface ready |
|||
Info : clock speed 1000 kHz |
|||
Info : JTAG tap: sam7x.cpu tap/device found: 0x3f0f0f0f (mfg: 0x787, part: 0xf0f0, ver: 0x3) |
|||
Info : Embedded ICE version 1 |
|||
Info : sam7x.cpu: hardware has 2 breakpoint/watchpoint units |
|||
</pre> |
|||
Launching a telnet: |
|||
<pre> |
|||
telnet localhost 4444 |
|||
Connected to localhost. |
|||
Escape character is '^]'. |
|||
Open On-Chip Debugger |
|||
> halt |
|||
target state: halted |
|||
target halted in ARM state due to debug-request, current mode: Supervisor |
|||
cpsr: 0xf00000d3 pc: 0x001c9c60 |
|||
> flash erase_sector 0 0 15 |
|||
erased sectors 0 through 15 on flash bank 0 in 0.033260s |
|||
> flash write_image /tmp/bootrom.s19 0x100000 |
|||
wrote 3624 bytes from file /tmp/bootrom.s19 in 0.392169s (9.024 KiB/s) |
|||
</pre> |
|||
The chip was new but in case you need to backup the chip content first, this should be possible with sth like "dump_image original.bin 0x100000 0x80000" |
|||
===Flashing full image=== |
|||
I also tried to flash the fullimage via JTAG but it failed working afterwards, so once the bootloader is installed, I used the usual recovery procedure: |
|||
* Press button and keep it pressed during the whole procedure |
|||
* Plug PM3 to USB |
|||
* ./flasher /dev/ttyACM0 fullimage.elf |
|||
* Release button and re-plug the PM3 |
|||
<pre> |
|||
===Done=== |
|||
$ ./proxmark3 /dev/ttyACM0 |
|||
Proxmark3 RFID instrument |
|||
bootrom: iceman/iceman/v2.1.0-1547-gb0df293d 2017-05-03 20:44:34 |
|||
os: iceman/iceman/v2.1.0-1547-gb0df293d 2017-05-03 20:44:39 |
|||
LF FPGA image built for 2s30vq100 on 2015/03/06 at 07:38:04 |
|||
HF FPGA image built for 2s30vq100 on 2015/11/ 2 at 9: 8: 8 |
|||
uC: AT91SAM7S512 Rev B |
|||
Embedded Processor: ARM7TDMI |
|||
Nonvolatile Program Memory Size: 512K bytes. Used: 217204 bytes (41%). |
|||
Free: 307084 bytes (59%). |
|||
Second Nonvolatile Program Memory Size: None |
|||
Internal SRAM Size: 64K bytes |
|||
Architecture Identifier: AT91SAM7Sxx Series |
|||
Nonvolatile Program Memory Type: Embedded Flash Memory |
|||
</pre> |
|||
Revision as of 08:35, 4 May 2017
Upgrading ELECHOUSE Proxmark3 Easy V3 to 512k
(de)soldering
The popular Proxmark3 Easy has an at91sam7s256 with only 256k and e.g. it's already about 83% full with the current iceman firmware.
So I decided to attempt an upgrade.
at91sam7s512 is about [15€ on http://fr.farnell.com/atmel/at91sam7s512b-au/micro-32-bits-arm7-512k-flash/dp/1972051 Farnell].
The steps I followed to desolder and solder the new chip are basically the same as seen on this youtube video:
- heating the chip with my desoldering station
- removing the chip with a small suction pen
- putting flux on the pads
- cleaning the pads with desoldering wire
- putting the new chip and soldering some pins to lock it in place (look for aligning the small dot on the correct corner)
- putting flux on the pins
- putting solder on the pins, don't be afraid of bridges...
- removing extra solder with desoldering wire
- checking carefully for residual solder bridges
And voila.
Note that it's maybe easier to solder the new chip not by using flux+solder+iron but solder flux paste and heating with air gun, as shown in this video...
JTAG programming
Then wire your JTAG programmer to the board. Mine is a Segger J-Link.
To make it easier, solder a breakable single-row male curved header.
Choose a curved one so you can leave it in place later and still stack the PM3 daughterboard.
Then using Dupont wires male-female, wire it to the JTAG programmer.
For the J-Link, the pinout is:
--------- --------- |1917151311 9 7 5 3 1| |201816141210 8 6 4 2| -------------------- PM3 JLink --- ----- TMS 7 TDI 5 TDO 13 TCK 9 GND 6 3.3 not connected
I didn't connect the 3v3 because J-Link Vref is 5v so I prefered to power the PM3 over USB while reprogramming it.
To use the J-Link on Debian:
$ apt-get install openocd
There is some doc installed locally: file:///usr/share/doc/openocd/openocd.html/index.html
Create /etc/udev/rules.d/60-jlink.rules with
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0101", MODE="664", GROUP="plugdev"
I created a config file by reusing most of tools/at91sam7s512-buspirate.cfg, but specific to J-Link instead of buspirate:
telnet_port 4444
gdb_port 3333
interface jlink
transport select jtag
adapter_khz 1000
reset_config srst_only srst_pulls_trst
jtag newtap sam7x cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id 0x3f0f0f0f
target create sam7x.cpu arm7tdmi -endian little -chain-position sam7x.cpu
sam7x.cpu configure -event reset-init {
soft_reset_halt
mww 0xfffffd00 0xa5000004 # RSTC_CR: Reset peripherals
mww 0xfffffd44 0x00008000 # WDT_MR: disable watchdog
mww 0xfffffd08 0xa5000001 # RSTC_MR enable user reset
mww 0xfffffc20 0x00005001 # CKGR_MOR : enable the main oscillator
sleep 10
mww 0xfffffc2c 0x000b1c02 # CKGR_PLLR: 16MHz * 12/2 = 96MHz
sleep 10
mww 0xfffffc30 0x00000007 # PMC_MCKR : MCK = PLL / 2 = 48 MHz
sleep 10
mww 0xffffff60 0x00480100 # MC_FMR: flash mode (FWS=1,FMCN=72)
sleep 100
}
gdb_memory_map enable
sam7x.cpu configure -work-area-virt 0 -work-area-phys 0x00200000 -work-area-size 0x10000 -work-area-backup 0
flash bank sam7x.flash.0 at91sam7 0 0 0 0 sam7x.cpu 0 0 0 0 0 0 0 18432
flash bank sam7x.flash.1 at91sam7 0 0 0 0 sam7x.cpu 1 0 0 0 0 0 0 18432
Launching OpenOCD:
$ openocd -f at91sam7s512-jlink.cfg Open On-Chip Debugger 0.9.0 (2017-03-07-13:28) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html adapter speed: 1000 kHz srst_only srst_pulls_trst srst_gates_jtag srst_open_drain connect_deassert_srst Info : J-Link ARM V8 compiled Dec 1 2009 11:42:48 Info : J-Link caps 0xb9ff7bbf Info : J-Link hw version 80000 Info : J-Link hw type J-Link Info : J-Link max mem block 9576 Info : J-Link configuration Info : USB-Address: 0x0 Info : Kickstart power on JTAG-pin 19: 0xffffffff Info : Vref = 3.332 TCK = 1 TDI = 0 TDO = 0 TMS = 0 SRST = 1 TRST = 1 Info : J-Link JTAG Interface ready Info : clock speed 1000 kHz Info : JTAG tap: sam7x.cpu tap/device found: 0x3f0f0f0f (mfg: 0x787, part: 0xf0f0, ver: 0x3) Info : Embedded ICE version 1 Info : sam7x.cpu: hardware has 2 breakpoint/watchpoint units
Launching a telnet:
telnet localhost 4444 Connected to localhost. Escape character is '^]'. Open On-Chip Debugger > halt target state: halted target halted in ARM state due to debug-request, current mode: Supervisor cpsr: 0xf00000d3 pc: 0x001c9c60 > flash erase_sector 0 0 15 erased sectors 0 through 15 on flash bank 0 in 0.033260s > flash write_image /tmp/bootrom.s19 0x100000 wrote 3624 bytes from file /tmp/bootrom.s19 in 0.392169s (9.024 KiB/s)
The chip was new but in case you need to backup the chip content first, this should be possible with sth like "dump_image original.bin 0x100000 0x80000"
Flashing full image
I also tried to flash the fullimage via JTAG but it failed working afterwards, so once the bootloader is installed, I used the usual recovery procedure:
- Press button and keep it pressed during the whole procedure
- Plug PM3 to USB
- ./flasher /dev/ttyACM0 fullimage.elf
- Release button and re-plug the PM3
===Done=== $ ./proxmark3 /dev/ttyACM0 Proxmark3 RFID instrument bootrom: iceman/iceman/v2.1.0-1547-gb0df293d 2017-05-03 20:44:34 os: iceman/iceman/v2.1.0-1547-gb0df293d 2017-05-03 20:44:39 LF FPGA image built for 2s30vq100 on 2015/03/06 at 07:38:04 HF FPGA image built for 2s30vq100 on 2015/11/ 2 at 9: 8: 8 uC: AT91SAM7S512 Rev B Embedded Processor: ARM7TDMI Nonvolatile Program Memory Size: 512K bytes. Used: 217204 bytes (41%). Free: 307084 bytes (59%). Second Nonvolatile Program Memory Size: None Internal SRAM Size: 64K bytes Architecture Identifier: AT91SAM7Sxx Series Nonvolatile Program Memory Type: Embedded Flash Memory