Adafruit - Feather m0 Wifi Atwinc1500
Adafruit - Feather m0 Wifi Atwinc1500
Adafruit - Feather m0 Wifi Atwinc1500
Guide Contents
Guide Contents
Overview
Pinouts
Power Pins
Logic pins
WiFi Module & LEDs
Other Pins!
Assembly
Header Options!
Soldering in Plain Headers
Prepare the header strip:
Add the breakout board:
And Solder!
Power Management
Battery + USB Power
Power supplies
Measuring Battery
ENable pin
Power Usage & Saving with WiFi
Arduino IDE Setup
Using with Arduino IDE
Install SAMD Support
Install Adafruit SAMD
Install Drivers (Windows Only)
Blink
Sucessful Upload
Compilation Issues
Manually bootloading
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
2
4
10
10
11
12
12
14
14
15
15
16
16
17
17
18
18
20
20
21
22
22
22
26
29
29
30
31
34
35
36
37
Page 2 of 66
GUI Usage
Manually Adding Certificates
Certicate Format
Adapting Sketches to M0
Analog References
Pin Outputs & Pullups
Serial vs SerialUSB
Missing header files
Bootloader Launching
Aligned Memory Access
FAQ
Downloads
Datasheets
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
37
39
39
40
41
42
43
49
51
51
52
52
54
59
62
62
62
62
63
63
64
65
66
66
Page 3 of 66
Overview
Feather is the new development board from Adafruit, and like its namesake it is thin, light, and lets you
fly! We designed Feather to be a new standard for portable microcontroller cores.
This is the Adafruit Feather M0 WiFi w/ATWINC1500 - our take on an 'all-in-one' Arduino-compatible
+ high speed, reliable WiFi with built in USB and battery charging. Its an Adafruit Feather M0 with a
WiFi module (http://adafru.it/2999), ready to rock! We have other boards in the Feather family,
check'em out here (http://adafru.it/l7B).
Connect your Feather to the Internet with this fine new FCC-certified WiFi module from Atmel. This
802.11bgn-capable WiFi module is the best new thing for networking your devices, with built-in lowpower management capabilites, Soft-AP, SSL support and rock solid performance. We were running
our adafruit.io MQTT demo for a full weekend straight with no hiccups (it would have run longer but we
had to go to work, so we unplugged it). This module is very fast & easy to use in comparison to other
WiFi modules we've used in the past.
This module works with 802.11b, g, or n networks & supports WEP, WPA and WPA2 encryption. You
can connect to your own WiFi networks or create your own with "Soft AP" mode, where it becomes its
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 4 of 66
own access point (we have an example of it creating a webserver that you can then control the
Arduino's pins). You can clock it as fast as 12MHz for speedy, reliable packet streaming. And
scanning/connecting to networks is very fast, just a second or two.
You might be wondering why use this when you can get a HUZZAH Feather? (http://adafru.it/2821)
Well, you get
A highly-capable Cortex M0+ processor with ton more I/O pins, lots of 12-bit ADCs, a 10-bit
DAC, 6 total SERCOMs that can each do SPI, I2C or UART (3 are used by the existing
interfaces, leaving you 3), plenty of timers, PWMs, DMA, native USB, and more (check out the
Datasheet (http://adafru.it/l3e))
The ATWINC has much lower power usage, about 12mA for the WINC & 10mA for the
ATSAMD21 with auto-powermanagement on for the WiFi and no power management for the
ARM. With manual power management, you can get the WiFi module to down to ~2mA by
putting it to sleep. This is compared to the ESP's ~70mA average current draw, and whose deep
sleep mode requires a WDT reset.
We also found that we could stream more reliably (less 'bursty') with the ATWINC, although
altogether the ESP has higher throughput.
You also dont have to 'yield' all the time to the WiFi core, since its a separate chip. You get full
reign of the processor and timing
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 5 of 66
Of course, both WiFi-capable Feathers have their strengths and tradeoffs, & we love both equally!
At the Feather M0's heart is an ATSAMD21G18 ARM Cortex M0 processor, clocked at 48 MHz and at
3.3V logic, the same one used in the new Arduino Zero (http://adafru.it/2843). This chip has a
whopping 256K of FLASH (8x more than the Atmega328 or 32u4) and 32K of RAM (16x as much)!
This chip comes with built in USB so it has USB-to-Serial program & debug capability built in with no
need for an FTDI-like chip. For advanced users who are comfortable with ASF, the SWDIO/SWCLK
pins are available on the bottom, and when connected to a CMSIS-DAP debugger can be used to use
Atmel Studio for debugging.
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 6 of 66
To make it easy to use for portable projects, we added a connector for any of our 3.7V Lithium
polymer batteries and built in battery charging. You don't need to use a battery, it will run just fine
straight from the micro USB connector. But, if you do have a battery, you can take it on the go, then
plug in the USB to recharge. The Feather will automatically switch over to USB power when its
available. We also tied the battery through a divider to an analog pin, so you can measure and monitor
the battery voltage to detect when you need a recharge.
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 7 of 66
Here's some handy specs! Like all Feather M0's you get:
Measures 2.1" x 0.9" x 0.3" (53.65mm x 23mm x 8mm) without headers soldered in. Note it is
0.1" longer than most Feathers
Light as a (large?) feather - 6.1 grams
ATSAMD21G18 @ 48MHz with 3.3V logic/power
256KB FLASH, 32KB SRAM, No EEPROM
3.3V regulator (AP2112K-3.3) with 600mA peak current output, WiFi can draw 300mA peak
during xmit
USB native support, comes with USB bootloader and serial port debugging
You also get tons of pins - 20 GPIO pins
Hardware Serial, hardware I2C, hardware SPI support
8 x PWM pins
10 x analog inputs
1 x analog output
Built in 200mA lipoly charger with charging status indicator LED
Pin #13 red LED for general purpose blinking
Power/enable pin
4 mounting holes
Reset button
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 8 of 66
Comes fully assembled and tested, with a USB bootloader that lets you quickly use it with the Arduino
IDE. We also toss in some header so you can solder it in and plug into a solderless
breadboard. Lipoly battery (http://adafru.it/e0v) and MicroUSB cable (http://adafru.it/aM5) not
included (but we do have lots of options in the shop if you'd like!)
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 9 of 66
Pinouts
The Feather M0 Adalogger is chock-full of microcontroller goodness. There's also a lot of pins and
ports. We'll take you a tour of them now!
Power Pins
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 10 of 66
GND - this is the common ground for all power and logic
BAT - this is the positive voltage to/from the JST jack for the optional Lipoly battery
USB - this is the positive voltage to/from the micro USB jack if connected
EN - this is the 3.3V regulator's enable pin. It's pulled up, so connect to ground to disable the
3.3V regulator
3V - this is the output from the 3.3V regulator, it can supply 600mA peak
Logic pins
This is the general purpose I/O pin set for the microcontroller.
All logic is 3.3V
All pins can do PWM output
All pins can be interrupt inputs
#0 / RX - GPIO #0, also receive (input) pin for Serial1 (hardware UART), also can be analog
input
#1 / TX - GPIO #1, also transmit (output) pin for Serial1, also can be analog input
#20 / SDA - GPIO #20, also the I2C (Wire) data pin. There's no pull up on this pin by default so
when using with I2C, you may need a 2.2K-10K pullup.
#21 / SCL - GPIO #21, also the I2C (Wire) clock pin. There's no pull up on this pin by default so
when using with I2C, you may need a 2.2K-10K pullup.
#5 - GPIO #5
#6 - GPIO #6
#9 - GPIO #9, also analog input A7. This analog input is connected to a voltage divider for the
lipoly battery so be aware that this pin naturally 'sits' at around 2VDC due to the resistor divider
#10 - GPIO #10
#11 - GPIO #11
#12 - GPIO #12
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 11 of 66
#13 - GPIO #13 and is connected to the red LED next to the USB jack
A0 - This pin is analog input A0 but is also an analog output due to having a DAC (digital-toanalog converter). You can set the raw voltage to anything from 0 to 3.3V, unlike PWM outputs
this is a true analog output
A1 thru A5 - These are each analog input as well as digital I/O pins.
SCK/MOSI/MISO (GPIO 24/23/22)- These are the hardware SPI pins, you can use them as
everyday GPIO pins (but recommend keeping them free as they are best used for hardware SPI
connections for high speed)
Since not all pins can be brought out to breakouts, due to the small size of the Feather, we use these
to control the WiFi module
#2 - used as the ENable pin for the WiFi module, by default pulled down low, set HIGH to enable
WiFi
#4 - used as the Reset pin for the WiFi module, controlled by the library
#7 - used as the IRQ interrupt request pin for the WiFi module, controlled by the library
#8 - used as the Chip Select pin for the WiFi module, used to select it for SPI data transfer
MOSI / MISO /SCK - the SPI pins are also used for WiFi module communication
Green LED - the top LED, in green, will light when the module has connected to an SSID
Yellow LED - the bottom LED, in yellow, will blink during data transfer
Other Pins!
RST - this is the Reset pin, tie to ground to manually reset the AVR, as well as launch the
bootloader manually
ARef - the analog reference pin. Normally the reference voltage is the same as the chip logic
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 12 of 66
voltage (3.3V) but if you need an alternative analog reference, connect it to this pin and select
the external AREF in your firmware. Can't go higher than 3.3V!
Wake - connected to the Wake pin on the WiFi module, not used at this time but it's there if you
want it
SWCLK & SWDIO - These pads on the bottom are used to program the chip. They can also be
connected to an SWD debugger.
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 13 of 66
Assembly
We ship Feathers fully tested but without headers attached - this gives you the most flexibility on
choosing how to use and configure your Feather
Header Options!
Before you go gung-ho on soldering, there's a few options to consider!
The first option is soldering in plain male headers, this lets you plug in the
Feather into a solderless breadboard
Another option is to go with socket female headers. This won't let you plug
the Feather into a breadboard but it will let you attach featherwings very
easily
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 14 of 66
We also have 'slim' versions of the female headers, that are a little shorter
and give a more compact shape
Finally, there's the "Stacking Header" option. This one is sort of the best-ofboth-worlds. You get the ability to plug into a solderless breadboard and
plug a featherwing on top. But its a little bulky
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 15 of 66
And Solder!
Be sure to solder all pins for reliable electrical contact.
(For tips on soldering, be sure to check out our Guide to
Excellent Soldering (http://adafru.it/aTk)).
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 16 of 66
You're done! Check your solder joints visually and continue onto
the next steps
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 17 of 66
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 18 of 66
And Solder!
Be sure to solder all pins for reliable electrical contact.
(For tips on soldering, be sure to check out our Guide to
Excellent Soldering (http://adafru.it/aTk)).
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 19 of 66
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 20 of 66
Power Management
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 21 of 66
The above shows the Micro USB jack (left), Lipoly JST jack (top left), as well as the 3.3V regulator and
changeover diode (just to the right of the JST jack) and the Lipoly charging circuitry (to the right of the
Reset button). There's also a CHG LED, which will light up while the battery is charging. This LED
might also flicker if the battery is not connected.
Power supplies
You have a lot of power supply options here! We bring out the BAT pin, which is tied to the lipoly JST
connector, as well as USB which is the +5V from USB if connected. We also have the 3V pin which has
the output from the 3.3V regulator. We use a 600mA peak AP2112K-33. While you can get 600mA
from it, you can't do it continuously from 5V as it will overheat the regulator. It's fine for, say, powering
the attached WiFi chip or XBee radio though, since the current draw is 'spiky' & sporadic.
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 22 of 66
Measuring Battery
If you're running off of a battery, chances are you wanna know what the voltage is at! That way you
can tell when the battery needs recharging. Lipoly batteries are 'maxed out' at 4.2V and stick around
3.7V for much of the battery life, then slowly sink down to 3.2V or so before the protection circuitry cuts
it off. By measuring the voltage you can quickly tell when you're heading below 3.7V
To make this easy we stuck a double-100K resistor divider on the BAT pin, and connected it to D9
(a.k.a analog #7 A7). You can read this pin's voltage, then double it, to get the battery voltage.
#define VBATPIN A9
float measuredvbat = analogRead(VBATPIN);
measuredvbat *= 2; // we divided by 2, so multiply back
measuredvbat *= 3.3; // Multiply by 3.3V, our reference voltage
measuredvbat /= 1024; // convert to voltage
Serial.print("VBat: " ); Serial.println(measuredvbat);
ENable pin
If you'd like to turn off the 3.3V regulator, you can do that with the EN(able) pin. Simply tie this pin to
Ground and it will disable the 3V regulator. The BAT and USB pins will still be powered
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 23 of 66
You can see the chip launch at about 1.5 seconds, then turn on the WiFi and at about 2s make the
SSID connection and MQTT connection. The average current is about 100ms afterwards, and a
packet spikes up to ~130mA at the 7 second mark.
100mA is still quite a bit, you can very easily reduce this by letting the WINC1500 manage its own
power:
WiFi.setSleepMode(M2M_PS_H_AUTOMATIC, 1); // go into power save mode when possible!
When this line is added, it lets the WINC1500 know that when nothings going on, shut down unneeded
parts. You dont have to manage the power modes, and the power will drop down nearly instantly to
about 22mA average (there's still spikes during transmit of course)
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 24 of 66
Note that 10mA or so is for the ATSAMD chip, so that means you've got ~12mA for the WiFi module.
If you want ultra-low power you can manage the WINC1500 module your own with
WiFi.setSleepMode(M2M_PS_MANUAL, 1);
With this mode, you can get much much lower power when you call the requestSleepmode (basically
1-2mA) and still have an active live WiFi connection...but, when not actively sleeping the power usage
seems higher (see that spikey part between seconds 3 and 8.5)
A mix of the two may give you the best performance. And don't forget that the SAMD21 is going to
draw 10mA so put the main chip to sleep too if you want to get to very low power sleep modes!
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 25 of 66
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 26 of 66
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 27 of 66
We will be adding a URL to the new Additional Boards Manager URLs option. The list of URLs is
comma separated, and you will only have to add each URL once. New Adafruit boards and updates to
existing boards will automatically be picked up by the Board Manager each time it is opened. The
URLs point to index files that the Board Manager uses to build the list of available & installed boards.
To find the most up to date list of URLs you can add, you can visit the list of third party board URLs on
the Arduino IDE wiki (http://adafru.it/f7U). We will only need to add one URL to the IDE in this example,
but you can add multiple URLS by separating them with commas. Copy and paste the link below
into the Additional Boards Manager URLs option in the Arduino IDE preferences.
https://adafruit.github.io/arduino-board-index/package_adafruit_index.json
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 28 of 66
Make sure you remove the apt.adafruit.com proxy setting from the Arduino preferences if you
have previously added it.
Here's a short description of each of the Adafruit supplied packages that will be available in the Board
Manager when you add the URL:
Adafruit AVR Boards - Includes support for Flora, Gemma, Feather 32u4, Trinket, & Trinket
Pro.
Adafruit SAMD Boards - Includes support for Feather M0
Arduino Leonardo & Micro MIDI-USB - This adds MIDI over USB support for the Flora,
Feather 32u4, Micro and Leonardo using the arcore project (http://adafru.it/eSI).
Click OK to save the new preference settings. Next we will look at installing boards with the Board
Manager.
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 29 of 66
Once the Board Manager opens, click on the category drop down menu on the top left hand side of
the window and select Contributed. You will then be able to select and install the boards supplied by
the URLs added to the prefrences.
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 30 of 66
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 31 of 66
Even though in theory you don't need to - I recommend rebooting the IDE
Quit and reopen the Arduino IDE to ensure that all of the boards are properly installed. You should
now be able to select and upload to the new boards listed in the Tools->Board menu.
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 32 of 66
device manager and find the Unknown Device that corresponds to the Feather. Right click and select
Update Driver Software
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 33 of 66
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 34 of 66
If the above driver isn't working for you, you can try this inf file, click to download it.
Download Adafruit_Feather_M0.inf
http://adafru.it/kCJ
When prompted by Windows to install a driver, point it at the downloaded file (you can move the file to
the Desktop then just Browse to the driver... rather than Let me pick from a list... and select
Desktop) You can see a step-by-step tutorial on how to do this for a similar (Flora) driver
here. (http://adafru.it/jAa)
Mac/Linux does not need a driver, continue as is!
Blink
Now you can upload your first blink sketch!
Plug in the Feather M0 and wait for it to be recognized by the OS (just takes a few seconds). It will
create a serial/COM port, you can now select it from the dropdown, it'll even be 'indicated' as Feather
M0!
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 35 of 66
And click upload! That's it, you will be able to see the LED blink rate change as you adapt the delay()
calls.
Sucessful Upload
If you have a successful upload, you'll get a bunch of red text that tells you that the device was found
and it was programmed, verified & reset
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 36 of 66
Compilation Issues
If you get an alert that looks like
Cannot run program "{runtime.tools.arm-none-eabi-gcc.path}\bin\arm-non-eabi-g++"
Make sure you have installed the Arduino SAMD boards package, you need both Arduino & Adafruit
SAMD board packages
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 37 of 66
Manually bootloading
If you ever get in a 'weird' spot with the bootloader, or you have uploaded code that crashes and
doesn't auto-reboot into the bootloader, click the RST button twice (like a double-click)to get back into
the bootloader.
The red LED will pulse, so you know that its in bootloader mode.
Once it is in bootloader mode, you can select the newly created COM/Serial port and re-try uploading.
You may need to go back and reselect the 'normal' USB serial port next time you want to use the
normal upload.
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 38 of 66
Note if you're using Ubuntu 15.04 (or perhaps other more recent Linux distributions) there is an issue
with the modem manager service which causes the Bluefruit LE micro to be difficult to program. If you
run into errors like "device or resource busy", "bad file descriptor", or "port is busy" when attempting to
program then you are hitting this issue. (http://adafru.it/fP6)
The fix for this issue is to make sure Adafruit's custom udev rules are applied to your system. One of
these rules is made to configure modem manager not to touch the Feather board and will fix the
programming difficulty issue. Follow the steps for installing Adafruit's udev rules on this
page. (http://adafru.it/iOE)
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 39 of 66
Once you have your Feather working, you probably want to rock out with some Wireless connectivity.
Luckily, Atmel & Arduino have written a great library for supporting the WINC1500
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 40 of 66
Rename the uncompressed folder Adafruit_WINC1500. Check that the Adafruit_WINC1500 folder
contains a folder named src and examples and a file named library.properties
Place the Adafruit_WINC1500 library folder your sketchbookfolder/libraries/ folder. You may need
to create the libraries subfolder if its your first library. Restart the IDE. You can figure out your
sketchbookfolder by opening up the Preferences tab in the Arduino IDE.
If you're not familiar with installing Arduino libraries, please visit our tutorial: All About Arduino
Libraries (http://adafru.it/aYM)!
Restart the Arduino IDE.
You may need to use Arduino 1.6.5 or later
Upload to your Arduino and open up the Serial Console at 9600 baud:
You should see that the firmware is 19.4.4
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 41 of 66
Scanning WiFi
Now that you have the right firmware version, lets scan for network!
Run the Adafruit_WINC1500->ScanNetworks example to see a list of available visible networks
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 42 of 66
It will connect to the website in server and read the webpage manually:
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 43 of 66
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 44 of 66
You can change the SSID (at this time the password isnt used) & LED (13 is the onboard feather LED)
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 45 of 66
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 46 of 66
Your computer will see the new AP and you should connect to it
Back over at the serial console, the Feather will have started up a server, it will print out the IP address
and instructions
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 47 of 66
Go to the IP address and you will see the mini webpage, click on the links to turn on/off the LED
In the serial console you will see the data received from the webbrowser client
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 48 of 66
That's it! pretty easy, huh? There's other examples you can try such as server mode, UDP data
transmission & SSL
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 49 of 66
update the pins as necessary, we have the default for use with the Feather M0 WINC1500
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 50 of 66
Now download or clone the WiFi101 Firmware Updater repository (http://adafru.it/leT) from github, you
can just click here to grab the latest Zip
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 51 of 66
You should see that it was able to reda the max payload size. Next up just run the same command but
add --certs certs to upload all the certificates in the certs directory
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 52 of 66
GUI Usage
You can also use the GUI which is nice and will also let you fetch the certificate and upload it directly. If
you don't need any particular site's cert just put in www.google.com
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 53 of 66
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 54 of 66
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 55 of 66
To figure out what certificate you need, go to the page you're trying to connect to, using your browser.
Then click on the lock (it may be in a different location) to make sure you're using https and its
secured. Then click More Information
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 56 of 66
Almost done, once you see the view of the certificate, click on Details
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 57 of 66
Finally, you can see the Root Certificate, its at the top of Certificate Hierarchy now click Export
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 58 of 66
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 59 of 66
Certicate Format
Open up the certificate in a text editor, if you see this you have an ascii certificate which is not what
you want!
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 60 of 66
Instead, make sure its in binary format like this (it should be a jumble of characters)
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 61 of 66
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 62 of 66
Adapting Sketches to M0
The ATSAMD21 is a very nice little chip but its fairly new as Arduino-compatible cores go. Most
sketches & libraries will work but here's a few things we noticed!
Analog References
If you'd like to use the ARef pin for a non-3.3V analog reference, the code to use is
analogReference(AR_EXTERNAL) (it's AR_EXTERNAL not EXTERNAL)
This is because the pullup-selection register is the same as the output-selection register.
For the M0, you can't do this anymore! Instead, use
pinMode(pin, INPUT_PULLUP)
Serial vs SerialUSB
99.9% of your existing Arduino sketches use Serial.print to debug and give output. For the Official
Arduino SAMD/M0 core, this goes to the Serial5 port, which isn't exposed on the Feather. The USB
port for the Official Arduino M0 core, is called SerialUSB instead.
In the Adafruit M0 Core, we fixed it so that Serial goes to USB when you use a Feather M0 so it will
automatically work just fine.
However, on the off chance you are using the official Arduino SAMD core & you want your Serial prints
and reads to use the USB port, use SerialUSB instead of Serial in your sketch
If you have existing sketches and code and you want them to work with the M0 without a huge findreplace, put
#if defined(ARDUINO_SAMD_ZERO) && defined(SERIAL_PORT_USBVIRTUAL)
// Required for Serial on Zero based boards
#define Serial SERIAL_PORT_USBVIRTUAL
#endif
right above the first function definition in your code. For example:
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 63 of 66
In which case you can simply locate where the line is (the error will give you the file name and line
number) and 'wrap it' with #ifdef's so it looks like:
#if !defined(ARDUINO_ARCH_SAM) && !defined(ARDUINO_ARCH_SAMD) && !defined(ESP8266) && !defined(AR
DUINO_ARCH_STM32F2)
#include <util/delay.h>
#endif
The above will also make sure that header file isn't included for other architectures
If the #include is in the arduino sketch itself, you can try just removing the line.
Bootloader Launching
For most other AVRs, clicking reset while plugged into USB will launch the bootloader manually, the
bootloader will time out after a few seconds. For the M0, you'll need to double click the button. You will
see a pulsing red LED to let you know you're in bootloader mode. Once in that mode, it wont time out!
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 64 of 66
You can't be guaranteed that this will work on a 32-bit platform because mybuffer might not be
aligned to a 2 or 4-byte boundary. The ARM Cortex-M0 can only directly access data on 16-bit
boundaries (every 2 or 4 bytes). Trying to access an odd-boundary byte (on a 1 or 3 byte location) will
cause a Hard Fault and stop the MCU. Thankfully, there's an easy work around ... just use memcpy!
uint8_t mybuffer[4];
float f;
memcpy(f, mybuffer, 4)
Adafruit Industries
https://learn.adafruit.com/adafruit-feather-m0-wifi-atwinc1500
Page 65 of 66
FAQ
My Feather M0 won't enumerate anymore and can't be programmed, help!
If something happens and your Feather M0 won't enumerate as a USB serial device, like perhaps you
were exploring the ATSAMD21's peripherals and accidentally misconfigured something, don't worry
you can try a few things to revive it back to normal.
First try pressing the reset button twice like a mouse double click. The LED should start pulsing
red to inform you the chip has entered its bootloader and is waiting a program upload.
The Feather M0 will show up as a new COM port device (if you haven't already installed the
Windows drivers, do that!)
Select the new bootloader COM port in the Arduino IDE
Now try uploading a simple blink example from the Arduino IDE to see if that gets the board
back into a good state.
If you don't get a pulsing red LED and the board doesn't enumerate as a serial device then something
has happened to the bootloader. Unfortunately the best option in this case is to connect to the singlewire debug test points on the back of the board (the SWDIO & SWCLK pads) and manually reprogram
the bootloader using a J-Link or ST-Link ARM programmer.
Adafruit Industries
Page 66 of 66
Downloads
Datasheets
Atmel Software Programming guide for WINC1500 (http://adafru.it/ldD) - this is for the
underlying ASF codebase that is 'wrapped' in Adafruit_WINC1500 but its still very handy
reference
ATSAMD21 Datasheet (http://adafru.it/ldE) - Its long, but its a good read