Merge branch 'nrf51-uicr' of https://github.com/richardeoin/blackmagic into richardeoin-nrf51-uicr

Conflicts:
	src/nrf51.c
This commit is contained in:
Gareth McMullin 2014-07-30 16:55:02 +12:00
commit 2b61bed291
1 changed files with 14 additions and 2 deletions

View File

@ -64,6 +64,9 @@ static const char nrf51_xml_memory_map[] = "<?xml version=\"1.0\"?>"
" <memory type=\"flash\" start=\"0x0\" length=\"0x40000\">" " <memory type=\"flash\" start=\"0x0\" length=\"0x40000\">"
" <property name=\"blocksize\">0x400</property>" " <property name=\"blocksize\">0x400</property>"
" </memory>" " </memory>"
" <memory type=\"flash\" start=\"0x10001000\" length=\"0x100\">"
" <property name=\"blocksize\">0x400</property>"
" </memory>"
" <memory type=\"ram\" start=\"0x20000000\" length=\"0x4000\"/>" " <memory type=\"ram\" start=\"0x20000000\" length=\"0x4000\"/>"
"</memory-map>"; "</memory-map>";
@ -90,6 +93,9 @@ static const char nrf51_xml_memory_map[] = "<?xml version=\"1.0\"?>"
#define NRF51_FICR_DEVICEADDR_LOW (NRF51_FICR + 0x0A4) #define NRF51_FICR_DEVICEADDR_LOW (NRF51_FICR + 0x0A4)
#define NRF51_FICR_DEVICEADDR_HIGH (NRF51_FICR + 0x0A8) #define NRF51_FICR_DEVICEADDR_HIGH (NRF51_FICR + 0x0A8)
/* User Information Configuration Registers (UICR) */
#define NRF51_UICR 0x10001000
#define NRF51_PAGE_SIZE 1024 #define NRF51_PAGE_SIZE 1024
uint16_t nrf51_flash_write_stub[] = { uint16_t nrf51_flash_write_stub[] = {
@ -177,8 +183,14 @@ static int nrf51_flash_erase(struct target_s *target, uint32_t addr, int len)
return -1; return -1;
while (len) { while (len) {
/* Write address of first word in page to erase it */ if (addr == NRF51_UICR) { // Special Case
adiv5_ap_mem_write(ap, NRF51_NVMC_ERASEPAGE, addr); /* Write to the ERASE_UICR register to erase */
adiv5_ap_mem_write(ap, NRF51_NVMC_ERASEUICR, 0x1);
} else { // Standard Flash Page
/* Write address of first word in page to erase it */
adiv5_ap_mem_write(ap, NRF51_NVMC_ERASEPAGE, addr);
}
/* Poll for NVMC_READY */ /* Poll for NVMC_READY */
while(adiv5_ap_mem_read(ap, NRF51_NVMC_READY) == 0) while(adiv5_ap_mem_read(ap, NRF51_NVMC_READY) == 0)