Close
0%
0%

samDEV_09

Mini devboard for Atmel's SAMD09 ARM Cortex M0+ Microcontroller

Similar projects worth following
Board for testing Atmel's SAMD09 MCUs. SAMD09 (should also work with SAMD10) and CH340 as UART-USB Bride.

build this board to getting started with the SAMD microcontroller family after I made the mistake to try the much bigger SAMD21 first. The SAMD09 used here is he smallest from this family and therefore has the shortest (still 709 p.) datasheet. I think this board will be, as my other microcontroller breakout boards, very useful for an early prototyping phase on breadboard. So far I quite like the SAMD09. If you compare it to the the ATmegas there are a lot more possibilities. Maybe this is the Arduino Nano killer for me.

Features

  • 3.3V 0.8A LDO (1117-3.3)
  • powered from USB, Vin pin (3.6-13.8V) or regulated 3.3V
  • on board USB to serial bride IC (CH340)
  • reset switch
  • SWD programming header
  • optional 32kHz crystal (if not needed pins can be used as additional IOs)
  • on board user LED (connected to PA02)
  • on board power LED (connected to 3.3 rail)

Schematic

Partlist:

Part   Value        Package     Comment
                    
A08                 0603        User LED connected to PA08
C1     100n         C0603       
C2     15p          C0603       optional 
C3     15p          C0603       optional 
C4     10n          C0603       
C5     100n         C0603       
C7     100n         C0603       
D1     MBR0520LT    SOD123      power selection diode
D2     MBR0520LT    SOD123      power selection diode
IC1    CH340G       SOIC16      USB-UART bridge
IC2    1117-3.3     SOT223      LDO
JP1                 1X08_OCTA   pin header
JP2                 1X08_OCTA   pin header
JP5                 2X05_1,27B  programming pin header 
K1     mini USB     generic     Mini USB connector
PWR                 0603 	Power LED
Q1     3215         3215        optional external 32kHz crystal 
Q2     CSTCRCSTCE   CSTCESMALL  12 MHz resonator for CH340G
R1     solder / 0   R0201       PA08 - pin header
R2     solder / 0   R0201       PA09 - pin header
R3     120  / 220   R0603       resistor for power LED
R4     120  / 220   R0603       resistor for user LED
R5     ~10k         R0603       pullup for reset
S2                  SMDSWITCH   Chinese SMD switch
U$1    SAMD09SOIC14 SO14        ARM Cortex M0+ microcontroller

PCB

The PCB design is quite compact and does fit on an normal breadboard:

On the Top side (left image) are all components which must be accessible like USB connector, programming header reset switch and LEDs. To archive this compact format with some tricks were used like vias on pads (this is no good design practice) and the two connections of the LDO for Vout are use as trace. So this will not work without the LDO if powered externally with 3.3V

Thinking on / ideas for the future / notes

  • A Hint when working with the Event System (EVSYS):
    • In the Channel Register (CHANNEL) the bits [2:0] are the channel nuber like normal (0b000->channel0 0b001->channel1)
    • BUT in the User Multiplexer Register (USER) the bits [11:8], which are also for the channel selection are channel#+1.( A zero means no Output in this case). So 0b0001->channel0, 0b0010->cannel1 and so on.
    • This took some time for me to notice that, although is it also written in the datasheet (p.409 Table 23-5).
  • This board should also work with the SAMD10C14 which has more features (like a DAC) and twice the amount of flash (8k->16k)

Errata

Rev 1.0 (date on the boards 3'16)

- The led label is wrong. It should be A02 instead of A08

Rev 1.1

....

Similar projects

This project is inspired and/or based on some of them:

  • SPI flash working

    Alex07/17/2016 at 17:25 1 comment

    I got the SPI flash working! Connecting SPI flash to the SMD09 give you a ton of additional memory to store data (e.g. for data loggers). So far I used a Macronix MX25L1005 1MBit (or 126kByte) flash. I found that on some old PCB and recycled it. There are a lot more SPI flash available, they look like they are compatible. Will test with a desoldered SPI Flash from an ESP module next. Here is a picture of my setup:
    The connections are quite simple: Power, GND and for wires for the SPI bus (MOSI, MISO, CLK and !SS). The logic analyser on the right is also connected to the SPI bus for debugging. I will upload the early stages of the used code to github also.

    Update: It is also working with a 25Q40 flash desolderd from a ESP-01 module. looks like there is a usable standard way to communicate with SPI flash.

  • SPI

    Alex07/16/2016 at 16:45 3 comments

    I got SPI working without using ASF now. I did upload my basic code used to the github repository also, if you interested. Now I will look how the SPI will work together with DMA. My goal is to connect some SPI flash. to store some logged data.

    small Update: I can read at least the ID of a SPI flash (MX25L1005) I found on some trash PCB now. Sadly I found only this one SPI flash. Need to order some new ones in china... or desolder them from ESP modules

    more Update: I did add some code line to the repository how to use my Spi libary. There is something to do in user code. For example all SS line handling must be done in user software.

  • rev1.1

    Alex07/08/2016 at 20:04 0 comments

    I just did order a new board revision. There were not much changes:
    - added connection between DTR and PA15 (for reset over uart -> bootloader)
    - changes wrong label (see errata)
    - added revision number
    - changes solder jumper to bigger ones
    - some minor optimisations

    And for ~2$ it was quite worth for me to test a for me unknown board house (perhaps you can guess it on the silkscreen color and plating)

    I will share the new boards when I have tested them.

  • Using the bootloader from Jeremy g.

    Alex07/06/2016 at 19:30 1 comment

    There is a project here on hackaday.io ( #MiniSam-Zero) which is using also a SAMD09. @Jeremy g. wrote also a bootloader for his project. And this boot loader can be also used for this board. In this log I will describe in short how. You should also take a look at Jeremy's project were he describes the usage of his bootloader in detail. For my needs I did also changed his bootloader a little bit: His and my boards are using different pins for a user LED. I did adapt his bootloader in this point.

    I will only write additional notes here, Jeremy did a quite good job to describe the work flow in detail here.

    Before you can use the bootloader you must flash your SAMD09 with it. For that you need some SWD-Programmer like the Atmel ICE or the Segger J-Link. you can either use the original bootloader from Jeremy or my modified version.

    You can test if the bootloader is available by sending a 'i' to the SAMD09 over uart (115200 8N1) with some terminal program (I like Termite):

    It should return some information (the green text).

    Programs which you want to upload need to have an different start address. This can be set in Atmel Studio. For details see Jeremy's log.

    After compiling your code you now should have a *.bin file somewhere in the output files. This file will be used by the bootloader's front end. This front end is some python2 script. If you did not used python before like me here are the steps I took (win7):

    • Download python 2.x
    • open a cmd window
    • navigate to your python script path (like: C:\Python27\Scripts)
    • activate pip (package manger) with: python -m pip install -U pip
    • install pyserial with: pip install pyserial

    Now you should be able to use Jeremy's uplaoder script. Just place it in the same directory as you *.bin file an execute it in this file like:

    upload.py -c com10 -b 115200 -i Blink.bin
    The script asked you to rest the SAMD09 and asks if the boot led (with my modified bootloder the on board user LED) is on. The bootled is on if you are in bootloader mode. To get ther you have to pull down PA15 during reset or connect it to the DTR pin of the CH340 (2nd not test by me yet).

    When the script is ready. Your program should run after a reset. You can find all files I used including a test *.bin file in my github repository. But all of Jeremy's stuff should also work (as long the programs are not to big for the smaller flash of the SOIC SAMD09).

    If you do not get out of the bootloader-mode (LED is always on) connect PA15 to 3.3V during reset. This will happen if you use Jeremy's or an very early version of my modified bootloader.

  • USB-UART bridge is also tested

    Alex06/19/2016 at 16:55 0 comments

    One of the main features of this board is now also tested. I used the CH340 UART to USB bridge on the bottom side of the board successfully. The CH340 is connected to PA24 (used as TX of SERCOM1) and PA25 (used as RX of SERCOM1). I wrote some functions, so my main routine looks quite simple:

    int main(void)
    {
        SystemInit();
        // SAMD09 TX-PA24-SERCOM1_PAD2   
        pin_set_peripheral_function(PINMUX_PA24C_SERCOM1_PAD2); 
        // SAMD09 RX-PA25-SERCOM1_PAD3
        pin_set_peripheral_function(PINMUX_PA25C_SERCOM1_PAD3); 
        UART_sercom_init(SERCOM1);
        UART_sercom_simpleWrite(SERCOM1, 'H');
        UART_sercom_simpleWrite(SERCOM1, 'e');
        UART_sercom_simpleWrite(SERCOM1, 'l');
        UART_sercom_simpleWrite(SERCOM1, 'l');
        UART_sercom_simpleWrite(SERCOM1, 'o');
        UART_sercom_simpleWrite(SERCOM1, '!');
        UART_sercom_simpleWrite(SERCOM1, 0xa);
        while (1) ;
    }

    The complete code can be seen here. This is not prefect code but works well for me for testing.

  • More pictures

    Alex06/19/2016 at 15:19 0 comments

  • It's blinking

    Alex06/18/2016 at 14:14 0 comments

    Blink

    I some one is interested the code I used you cann take a look at it here.

  • Suddenly a soldered unit appears

    Alex06/17/2016 at 18:25 0 comments

    Although this is the first log. The first unit is now ready: More information / pictures / code is coming soon.

View all 8 project logs

Enjoy this project?

Share

Discussions

Jeremy g. wrote 07/04/2016 at 15:21 point

thank you for the mention! I just finished the serial bootloader for samd09 boards. Still need to do some code Cleanup and create a Readme, but if you want to check it out its on my github linked in the project.

Have a great fourth.

  Are you sure? yes | no

Jeremy g. wrote 06/21/2016 at 03:28 point

looks awsome, I love the compact design. I just made one for the samd09 24 pin Micro as well.

  Are you sure? yes | no

j0z0r pwn4tr0n wrote 06/19/2016 at 21:10 point

Do you have a BOM or parts list?

  Are you sure? yes | no

Alex wrote 06/20/2016 at 14:51 point

yes. I added a list to the details and to the github repository now. 

  Are you sure? yes | no

j0z0r pwn4tr0n wrote 07/01/2016 at 04:32 point

Awesome, I just got the board in the mail, now I have to order the parts to populate it. This might be an Arduino Nano killer for me too. Thanks for sharing this with the community!!! 

  Are you sure? yes | no

Alex wrote 07/01/2016 at 14:55 point

nice

  Are you sure? yes | no

davedarko wrote 06/19/2016 at 15:42 point

as always a great looking board! Any plans or projects to use it?

  Are you sure? yes | no

Alex wrote 06/19/2016 at 15:50 point

I am already using this microcontroller for something, but I will not publish that. But I think, I will use it also for other future projects. I quite like this microcntroller so far. This could be the Arduino Nano killer for me. 
Beside a real use this board is very good to get in touch with controllers from the SAMD family, because the SAMD09 is the smallest and therefore has the shortest (still 709 p.) datasheet.  [And now I am thinking I should add this reply to the details.]

  Are you sure? yes | no

Craig Hissett wrote 06/20/2016 at 15:08 point

I'm now instantly intrigued about what you are using this for now :)

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates