Arduino Due: Fixes to FLASH address, flash wait states, updated Comments. Now boots and runs a bit before crashing

This commit is contained in:
Gregory Nutt 2013-06-28 11:29:14 -06:00
parent f20f23cf31
commit e34e1ee987
6 changed files with 131 additions and 99 deletions

View File

@ -212,7 +212,7 @@
#define SAM_PIOA_WPSR (SAM_PIOA_BASE+SAM_PIO_WPSR_OFFSET)
#define SAM_PIOB_PER (SAM_PIOB_BASE+SAM_PIO_PER_OFFSET)
#define SAM_PIOB_PDR_ (SAM_PIOB_BASE+SAM_PIO_PDR_OFFSET)
#define SAM_PIOB_PDR (SAM_PIOB_BASE+SAM_PIO_PDR_OFFSET)
#define SAM_PIOB_PSR (SAM_PIOB_BASE+SAM_PIO_PSR_OFFSET)
#define SAM_PIOB_OER (SAM_PIOB_BASE+SAM_PIO_OER_OFFSET)
#define SAM_PIOB_ODR (SAM_PIOB_BASE+SAM_PIO_ODR_OFFSET)
@ -256,7 +256,7 @@
#define SAM_PIOB_WPSR (SAM_PIOB_BASE+SAM_PIO_WPSR_OFFSET)
#define SAM_PIOC_PER (SAM_PIOC_BASE+SAM_PIO_PER_OFFSET)
#define SAM_PIOC_PDR_ (SAM_PIOC_BASE+SAM_PIO_PDR_OFFSET)
#define SAM_PIOC_PDR (SAM_PIOC_BASE+SAM_PIO_PDR_OFFSET)
#define SAM_PIOC_PSR (SAM_PIOC_BASE+SAM_PIO_PSR_OFFSET)
#define SAM_PIOC_OER (SAM_PIOC_BASE+SAM_PIO_OER_OFFSET)
#define SAM_PIOC_ODR (SAM_PIOC_BASE+SAM_PIO_ODR_OFFSET)

View File

@ -58,17 +58,19 @@
/* Code memory region */
#define SAM_BOOTMEMORY_BASE 0x00000000 /* 0x00000000-0x003fffff: Boot Memory */
#define SAM_INTFLASH0_BASE 0x00400000 /* 0x00400000-0x000fffff: Internal FLASH 0 */
#define SAM_INTFLASH1_BASE (0x00400000 + SAM34_FLASH_SIZE/2)
#define SAM_INTROM_BASE 0x00800000 /* 0x00180000-0x00bfffff: Internal ROM */
/* 0x00c00000-0x1fffffff: Reserved */
#define SAM_INTFLASH0_BASE 0x00080000 /* 0x00080000-0x000fffff: Internal FLASH 0 */
#define SAM_INTFLASH1_BASE (0x00080000 + SAM34_FLASH_SIZE/2)
#define SAM_INTROM_BASE 0x00100000 /* 0x00100000-0x001fffff: Internal ROM */
/* 0x00200000-0x1fffffff: Reserved */
/* Internal SRAM memory region */
#define SAM_INTSRAM0_BASE 0x20000000 /* 0x20000000-0x2007ffff: Internal SRAM 0 */
#define SAM_INTSRAM1_BASE 0x20080000 /* 0x20080000-0x200fffff: Internal SRAM 0 */
#define SAM_NFCSRAM_BASE 0x20100000 /* 0x20100000-0x2017ffff: NAND FLASH controller (SRAM) */
#define SAM_UOTGHSRAM_BASE 0x20180000 /* 0x20100000-0x201fffff: UOTGHS controller (DMA) */
/* 0x20200000-0x3fffffff: Undefined */
/* 0x20200000-0x201fffff: Undefined */
#define SAM_BBSRAM_BASE 0x22000000 /* 0x22000000-0x23ffffff: 32Mb bit-band alias */
/* 0x24000000-0x3fffffff: Undefined */
/* Peripherals address region */
#define SAM_HSMCI_BASE 0x40000000 /* 0x40000000-0x400003ff: High Speed Multimedia Card Interface */
@ -109,7 +111,10 @@
#define SAM_DACC_BASE 0x400c8000 /* 0x400c8000-0x400cffff: Digital To Analog Converter */
/* 0x400d0000-0x400dffff: Reserved */
#define SAM_SYSCTRLR_BASE 0x400e0000 /* 0x400e0000-0x4007ffff: System Controller */
/* 0x40080000-0x400fffff: Reserved */
/* 0x40080000-0x40ffffff: Reserved */
/* 0x41000000-0x41ffffff: Undefined */
#define SAM_BBPERIPH_BASE 0x42000000 /* 0x42000000-0x43ffffff: 32Mb bit-band alias */
/* 0x44000000-0x5fffffff: Undefined */
/* System Controller Register Blocks: 0x400e0000-0x4007ffff */
#define SAM_SMC_BASE 0x400e0000 /* 0x400e0000-0x400e01ff: Static Memory Controller */

View File

@ -252,7 +252,7 @@ static inline int sam_configoutput(uintptr_t base, uint32_t pin,
putreg32(pin, base + SAM_PIO_CODR_OFFSET);
}
/* Configure the pin as an input and enable the GPIO function */
/* Configure the pin as an output and enable the GPIO function */
putreg32(pin, base + SAM_PIO_OER_OFFSET);
putreg32(pin, base + SAM_PIO_PER_OFFSET);

View File

@ -411,113 +411,138 @@ Loading Code
Uploading NuttX to the Due Using Bossa:
---------------------------------------
Generic BOSSA installation files are avaialable here:
http://sourceforge.net/projects/b-o-s-s-a/?source=dlp
Where do you get it?
Generic BOSSA installation files are avaialable here:
http://sourceforge.net/projects/b-o-s-s-a/?source=dlp
However, DUE uses a patched version of BOSSA available as source code here:
https://github.com/shumatech/BOSSA/tree/arduino
However, DUE uses a patched version of BOSSA available as source code here:
https://github.com/shumatech/BOSSA/tree/arduino
But, fortunately, since you already installed Arduino, you already have
BOSSA installed here. In my installation, it is here:
But, fortunately, since you already installed Arduino, you already have
BOSSA installed. In my installation, it is here:
C:\Program Files (x86)\Arduino\arduino-1.5.2\hardware\tools\bossac.exe
C:\Program Files (x86)\Arduino\arduino-1.5.2\hardware\tools\bossac.exe
Where is some sample output from a Windows CMD.exe shell. NOTE that my
Arduino programming port shows up as COM26. It may be different on your
system.
General Procedure
-----------------
To enter boot mode, set the baud to 1200 and send anything to the
programming port:
1) Erase the FLASH and put the Due in bootloader mode
2) Write the file to FLASH
3) Configure to boot from FLASH
4) Reset the DUE
C:\Program Files (x86)\Arduino\arduino-1.5.2\hardware\tools>mode com26:1200,n,8,1
Erase FLASH and Put the Due in Bootloader Mode
----------------------------------------------
This is accomplished by simply configuring the programming port in 1200
baud and sending something on the programming port. Here is some sample
output from a Windows CMD.exe shell. NOTE that my Arduino programming
port shows up as COM26. It may be different on yoursystem.
Status for device COM26:
------------------------
Baud: 1200
Parity: None
Data Bits: 8
Stop Bits: 1
Timeout: ON
XON/XOFF: OFF
CTS handshaking: OFF
DSR handshaking: OFF
DSR sensitivity: OFF
DTR circuit: ON
RTS circuit: ON
To enter boot mode, set the baud to 1200 and send anything to the
programming port:
C:\Program Files (x86)\Arduino\arduino-1.5.2\hardware\tools>bossac.exe --port=COM26 -U false -i
Device : ATSAM3X8
Chip ID : 285e0a60
Version : v1.1 Dec 15 2010 19:25:04
Address : 524288
Pages : 2048
Page Size : 256 bytes
Total Size : 512KB
Planes : 2
Lock Regions : 32
Locked : none
Security : false
Boot Flash : false
C:\Program Files (x86)\Arduino\arduino-1.5.2\hardware\tools>mode com26:1200,n,8,1
In a Cygwin BaSH shell:
Status for device COM26:
------------------------
Baud: 1200
Parity: None
Data Bits: 8
Stop Bits: 1
Timeout: ON
XON/XOFF: OFF
CTS handshaking: OFF
DSR handshaking: OFF
DSR sensitivity: OFF
DTR circuit: ON
RTS circuit: ON
export PATH="/cygdrive/c/Program Files (x86)/Arduino/arduino-1.5.2/hardware/tools":$PATH
C:\Program Files (x86)\Arduino\arduino-1.5.2\hardware\tools>bossac.exe --port=COM26 -U false -i
Device : ATSAM3X8
Chip ID : 285e0a60
Version : v1.1 Dec 15 2010 19:25:04
Address : 524288
Pages : 2048
Page Size : 256 bytes
Total Size : 512KB
Planes : 2
Lock Regions : 32
Locked : none
Security : false
Boot Flash : false
Erasing, writing, and verifying FLASH with bossac:
Writing FLASH and Setting FLASH Boot Mode
-----------------------------------------
In a Cygwin BaSH shell:
$ bossac.exe --port=COM26 -U false -e -w -v -b nuttx.bin -R
No device found on COM26
export PATH="/cygdrive/c/Program Files (x86)/Arduino/arduino-1.5.2/hardware/tools":$PATH
This error means that there is code running on the Due already so the
bootloader cannot connect. Pressing reset and trying again
Erasing, writing, and verifying FLASH with bossac:
$ bossac.exe --port=COM26 -U false -e -w -v -b nuttx.bin -R
No device found on COM26
$ bossac.exe --port=COM26 -U false -e -w -v -b nuttx.bin -R
Erase flash
Write 86588 bytes to flash
[==============================] 100% (339/339 pages)
Verify 86588 bytes of flash
[==============================] 100% (339/339 pages)
Verify successful
Set boot flash true
CPU reset.
Sill No connection because Duo does not jump to bootloader after reset.\
Press ERASE button and try again
Some things that can go wrong:
$ bossac.exe --port=COM26 -U false -e -w -v -b nuttx.bin -R
Erase flash
Write 86588 bytes to flash
[==============================] 100% (339/339 pages)
Verify 86588 bytes of flash
[==============================] 100% (339/339 pages)
Verify successful
Set boot flash true
CPU reset.
$ bossac.exe --port=COM26 -U false -e -w -v -b nuttx.bin -R
No device found on COM26
This error means that there is code running on the Due already so the
bootloader cannot connect. Pressing reset and trying again
$ bossac.exe --port=COM26 -U false -e -w -v -b nuttx.bin -R
No device found on COM26
Sill No connection because Duo does not jump to bootloader after reset.
Press ERASE button and try again
$ bossac.exe --port=COM26 -U false -e -w -v -b nuttx.bin -R
Erase flash
Write 86588 bytes to flash
[==============================] 100% (339/339 pages)
Verify 86588 bytes of flash
[==============================] 100% (339/339 pages)
Verify successful
Set boot flash true
CPU reset.
Other useful bossac things operations.
-------------------------------------
a) Write code to FLASH don't change boot mode and don't reset. This lets
you examine the FLASH contents that you just loaded while the bootloader
is still active.
a) Write code to FLASH don't change boot mode and don't reset. This lets
you examine the FLASH contents that you just loaded while the bootloader
is still active.
$ bossac.exe --port=COM26 -U false -e -w -v --boot=0 nuttx.bin
Write 64628 bytes to flash
[==============================] 100% (253/253 pages)
Verify 64628 bytes of flash
[==============================] 100% (253/253 pages)
Verify successful
$ bossac.exe --port=COM26 -U false -e -w -v nuttx.bin
Write 64628 bytes to flash
[==============================] 100% (253/253 pages)
Verify 64628 bytes of flash
[==============================] 100% (253/253 pages)
Verify successful
Set boot flash true
b) Verify the FLASH contents (the bootloader must be running)
Verify the FLASH contents (the bootloader must be running)
$ bossac.exe --port=COM26 -U false -v nuttx.bin
Verify 64628 bytes of flash
[==============================] 100% (253/253 pages)
Verify successful
$ bossac.exe --port=COM26 -U false -v nuttx.bin
Verify 64628 bytes of flash
[==============================] 100% (253/253 pages)
Verify successful
c) Read from FLASH to a file (the bootloader must be running):
Read from FLASH to a file (the bootloader must be running):
$ bossac.exe --port=COM26 -U false --read=4096 nuttx.dump
Read 4096 bytes from flash
[==============================] 100% (16/16 pages)
$ bossac.exe --port=COM26 -U false --read=4096 nuttx.dump
Read 4096 bytes from flash
[==============================] 100% (16/16 pages)
d) Change to boot from FLASH
Change to boot from FLASH
$ bossac.exe --port=COM26 -U false --boot=1
Set boot flash true
$ bossac.exe --port=COM26 -U false --boot=1
Set boot flash true
Uploading NuttX to the Due Using JTAG:
-------------------------------------

View File

@ -44,6 +44,7 @@
#ifndef __ASSEMBLY__
# include <stdint.h>
# include <stdbool.h>
# ifdef CONFIG_GPIO_IRQ
# include <arch/irq.h>
# endif
@ -127,16 +128,17 @@
/* FLASH wait states
*
* FWS Max frequency
* FWS MAX FREQUENCY
* 1.62V 1.8V
* --- ----- ------
* 0 24MHz 27MHz
* 1 40MHz 47MHz
* 2 72MHz 84MHz
* 3 84MHz 96MHz
* 0 17MHz 19MHz
* 1 45MHz 50MHz
* 2 58MHz 64MHz
* 3 70MHz 80MHz
* 4 78MHz 90MHz
*/
#define BOARD_FWS 2
#define BOARD_FWS 4
/* LED definitions ******************************************************************/
/* There are two user-controllable LEDs on board the Arduino Due board:

View File

@ -33,13 +33,13 @@
*
****************************************************************************/
/* The ATSAM3X8E has 512KB of FLASH beginning at address 0x0040:0000 and
/* The ATSAM3X8E has 512KB of FLASH beginning at address 0x0008:0000 and
* up to 100KB SRAM in three memory regions.
*/
MEMORY
{
flash (rx) : ORIGIN = 0x00400000, LENGTH = 1024K
flash (rx) : ORIGIN = 0x00080000, LENGTH = 1024K
sram0 (rwx) : ORIGIN = 0x20000000, LENGTH = 64K
sram1 (rwx) : ORIGIN = 0x20080000, LENGTH = 32K
nfcram (rwx) : ORIGIN = 0x20100000, LENGTH = 4K