File 0003-add-support-for-Atmel-Cortex-M7-chips-SAM-S70-E70-V7.patch of Package BOSSA
From 010e7ffdb0bb601b3e574f2b06bee1baff5c8528 Mon Sep 17 00:00:00 2001
From: Jeff Weisberg <jaw@tcp4me.com>
Date: Fri, 17 Jun 2016 18:38:26 -0400
Subject: [PATCH 3/7] add support for Atmel Cortex-M7 chips: SAM S70, E70, V70,
V71
---
src/Command.cpp | 13 +++++++++++++
src/EefcFlash.cpp | 11 ++++++-----
src/FlashFactory.cpp | 23 +++++++++++++++++++++++
src/Samba.cpp | 16 ++++++++++------
src/Samba.h | 4 +++-
5 files changed, 55 insertions(+), 12 deletions(-)
diff --git a/src/Command.cpp b/src/Command.cpp
index 02cefa2fff54..6ca20482f3c2 100644
--- a/src/Command.cpp
+++ b/src/Command.cpp
@@ -882,6 +882,19 @@ CommandPio::invoke(char* argv[], int argc)
}
}
}
+ // Check for Cortex-M7 SAM S70, E70, V70, V71
+ else if (eproc == 0 && arch >= 0x10 && arch <= 0x13)
+ {
+ switch (port)
+ {
+ case 'a': addr = 0x400e0e00; break;
+ case 'b': addr = 0x400e1000; break;
+ case 'c': addr = 0x400e1200; break;
+ case 'd': addr = 0x400e1400; break;
+ case 'e': addr = 0x400e1600; break;
+ }
+ }
+
else
{
switch (port)
diff --git a/src/EefcFlash.cpp b/src/EefcFlash.cpp
index 6962904b39ac..c25e10839a7d 100644
--- a/src/EefcFlash.cpp
+++ b/src/EefcFlash.cpp
@@ -72,8 +72,8 @@ EefcFlash::EefcFlash(Samba& samba,
_regs(regs), _canBrownout(canBrownout), _eraseAuto(true)
{
assert(planes == 1 || planes == 2);
- assert(pages <= 2048);
- assert(lockRegions <= 32);
+ assert(pages <= 4096);
+ assert(lockRegions <= 128);
// SAM3 Errata (FWS must be 6)
_samba.writeWord(EEFC0_FMR, 0x6 << 8);
@@ -290,7 +290,7 @@ EefcFlash::waitFSR()
uint32_t fsr0;
uint32_t fsr1 = 0x1;
- while (++tries <= 500)
+ while (++tries <= 1000)
{
fsr0 = _samba.readWord(EEFC0_FSR);
if (fsr0 & (1 << 2))
@@ -304,9 +304,10 @@ EefcFlash::waitFSR()
}
if (fsr0 & fsr1 & 0x1)
break;
- usleep(100);
+ // nb. the larger devices can take several seconds to erase
+ usleep(1000 * tries);
}
- if (tries > 500)
+ if (tries > 1000)
throw FlashCmdError();
}
diff --git a/src/FlashFactory.cpp b/src/FlashFactory.cpp
index 27af002b5951..ebac04407302 100644
--- a/src/FlashFactory.cpp
+++ b/src/FlashFactory.cpp
@@ -78,6 +78,29 @@ FlashFactory::create(Samba& samba, uint32_t chipId)
ATSAMR21E18A_BUFFER_ADDR, ATSAMR21E18A_STACK_ADDR, ATSAMR21E18A_NVMCTRL_BASE, /*canBrownout*/true ) ;
break;
//
+ // SAM E70, S70, V70, V71
+ //
+ case 0xA1020C00: // E70
+ case 0xA1120C00: // S70
+ case 0xA1220C00: // V71
+ case 0xA1320C00: // V70
+ flash = new EefcFlash(samba, "ATSAM(SEV)70x20", 0x400000, 2048, 512, 1, 64, 0x20401000, 0x20420000, 0x400e0c00, false);
+ break;
+
+ case 0xA1020E00: // E70
+ case 0xA1120E00: // S70
+ case 0xA1220E00: // V71
+ // NB. there is no V70x21
+ flash = new EefcFlash(samba, "ATSAM(SEV)70x21", 0x400000, 4096, 512, 1, 128, 0x20401000, 0x20420000, 0x400e0c00, false);
+ break;
+
+ case 0xA10D0A00: // E70
+ case 0xA11D0A00: // S70
+ case 0xA12D0A00: // V71
+ case 0xA13D0A00: // V70
+ flash = new EefcFlash(samba, "ATSAM(SEV)70x19", 0x400000, 1024, 512, 1, 32, 0x20401000, 0x20420000, 0x400e0c00, false);
+ break;
+ //
// SAM7SE
//
case 0x272a0a40:
diff --git a/src/Samba.cpp b/src/Samba.cpp
index 52af30385f48..c06b2ff2a42f 100644
--- a/src/Samba.cpp
+++ b/src/Samba.cpp
@@ -621,10 +621,6 @@ Samba::reset(void)
switch (getChipArchitecture(chipId))
{
- case ATSAMD21J18A_CHIPID:
- case ATSAMD21G18A_CHIPID:
- case ATSAMD21E18A_CHIPID:
- case ATSAMR21E18A_CHIPID:
case SAMD20:
case SAMD21:
// http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0484c/index.html
@@ -736,8 +732,16 @@ Samba::getChipArchitecture(uint32_t cid)
uint8_t eproc = (cid >> 5) & 0x7;
uint8_t arch = (cid >> 20) & 0xff;
+ // Check for Cortex-M7 processor
+ if (eproc == 0)
+ {
+ if( arch >= 0x10 && arch <= 0x13 )
+ return CORTEXM7;
+ if (_debug)
+ printf("Unsupported ARM Cortex-M7 architecture\n");
+ }
// Check for ARM7TDMI processor
- if (eproc == 2)
+ else if (eproc == 2)
{
// Check for SAM7 architecture
if (arch == 0x70)
@@ -791,7 +795,7 @@ Samba::getChipArchitecture(uint32_t cid)
{
// Check for SAM4 architecture
if (arch >= 0x88 && arch <= 0x8a)
- return true;
+ return SAM4;
if (_debug)
printf("Unsupported Cortex-M4 architecture\n");
}
diff --git a/src/Samba.h b/src/Samba.h
index f5c2bbe75ea0..bc8b1a760209 100644
--- a/src/Samba.h
+++ b/src/Samba.h
@@ -100,6 +100,7 @@ private:
SAM3S,
SAM3SD,
SAM3N,
+ SAM4,
SAM7S,
SAM7XC,
SAM7SE,
@@ -108,7 +109,8 @@ private:
SAM7SL,
SAM9XE,
SAMD20,
- SAMD21
+ SAMD21,
+ CORTEXM7
};
bool _debug;
--
2.9.2