Hi,
I'm an engineer not a programmer so out of my comfort zone beyond simple c type programming.
A while back I designed a custom PCB similar to Arduino MKRZERO, initially I used the same uC, a SAMD21G18. I wrote a fairly extensive program based on a custom board variant and had the whole thing working tickety-boo.
Fast forward to Covid and supply line disruptions and chip shortages I could not get the SAMD21G18 parts so I moved to the SAMD21G17. I built one of my custom boards with the 17 variation and the problem I have is that after successful compile and link when Arduino attempts to load the main program via the bootloader (using the open source bossac uploader), bossac does not recognize the G17 chip ID 0x10010093 and quits with an unrecognized chip ID message.
I know for a fact my code compiles and works because as a work around I compiled a no bootloader version and loaded it using atmel studio and a Segger programmer. The problem is I need to do further development and would like to simply do it using Arduino and do updates using the normal bootloader that uses bossac via the USB port (just like a conventional Arduino board and the way I was doing it when I had the G18A parts.)
A bit of google searching and bossa, and bossac are open source and available here:
https://github.com/shumatech/BOSSAI'm not the first one to have this problem and others have made branches of the original BOSSA and BOSSAC project to support other varieties of the SAMD processors, unfortunately, none with the G17D I'm using. See:
https://github.com/mattairtech/ArduinoCore-samd https://github.com/ElectronicCats/BOSSA/releases/tag/v1.1.1These branched versions actually supports some varieties of the SAMD21G17, just not the one I'm using. I'm pretty sure if just one line is added to device.cpp for the mattairtech branch, or a new section to the ElectronicCats branch in Devices.h and then compiled for Win7 (64), my problem would be solved.
mattairtech example
case 0x10010001: // J17A
case 0x10010006: // G17A
case 0x10010093: // G17D 128KB FLASH 48TQFP <--- this is the new line required at about line 456 in devices.cpp there are 4 instances of G17A, however all have different chip ID's
case 0x1001000b: // E17A
case 0x10010010: // G17A WLCSP
_family = FAMILY_SAMD21;
flashPtr = new D2xNvmFlash(_samba, "ATSAMD21x17", 2048, 64, 0x20002000, 0x20004000) ;
break;
---------------------------
ElectronicCats example Devices.h
#define ATSAMD21G17D_NAME "ATSAMD21G17D"
#define ATSAMD21G17D_CHIPID (0x10010093ul) // DIE & REV bitfields masked in Samba::chipId()
#define ATSAMD21G17D_FLASH_BASE (0x00000000ul + ATSAMD_BOOTLOADER_SIZE)
#define ATSAMD21G17D_FLASH_PAGE_SIZE (64ul)
#define ATSAMD21G17D_FLASH_PAGES (2048ul)
#define ATSAMD21G17D_FLASH_PLANES (1ul)
#define ATSAMD21G17D_FLASH_LOCK_REGIONS (16ul)
#define ATSAMD21G17D_BUFFER_ADDR (0x20002000ul)
#define ATSAMD21G17D_STACK_ADDR (0x20004000ul)
#define ATSAMD21G17D_NVMCTRL_BASE (0x41004000ul)
If you can do that, please let me know and what you would charge.
J