Thursday, May 16, 2013

Getting Started with the STM32F4 Discovery Board using Keil


This short post is deigned to help you get started with Keil and the STM32F4 Discovery board. By the end of this post you should be able to download the pre-reqs, install the software, open up the demo program and debug it using the Keil IDE. The  key things to note are:
  1. You must install the ST-LINK driver.
  2. By default Keil is naturally setup for ULink rather than ST-Link so that has to be changed
  3. The default device will be incorrect and must be changed

Here's the steps:



  • Open up the demo project from the board support package:
    • STM32F4-Discovery_FW_V1.1.0\Project\Demonstration\MDK-ARM\STM32F4-Discovery_Demo.uvproj

  • Configure Keil for ST-Link and Discovery - Project Options (ALT-F7)
  1. Device: STM32F407VG
  2. Debug: use ST-Link Debugger (NOT the deprecated one)
  3. Debug settings:  add STM32F4xx Flash
  4. Utilities: select ST-Link Debugger
  5. Utilities settings:  add STM32F4xx Flash
  6. Utilities: Update target before debugging

·         Build the project from the Project menu – Build target (F7)
·         You should now be able to debug the demo program from the debug menu (Ctrl-F5)

Getting Started with Raspberry Pi


In this post were going to take the fastest route to getting going on the Raspberry Pi. Instead of hooking up a keyboard, mouse and HDMI cable we are going to control the Raspberry Pi from the Terminal window on Mac or by using Putty on Windows via a console cable (uses the Prolific PL2303 as the driver device). Then we're going to install a USB Wifi dongle. Once you've done that, you can connect from your terminal window or Putty via the network using ssh, requiring no cables. We assume Raspbian distro.

Both a console cable and Wifi dongle are included in the oddWires Raspberry Pi Starter Kit .

Connect the leads

  • The red lead to 5V
  • The black lead to GND
  • The white lead to TXD
  • The green lead to RXD

Download software and install it

Windows

  • Download Putty from here and install it. You're going to use this to provide a command line window to the Raspberry Pi.
  • Download the PL2303 driver for the console cable from here and install it.
  • Once it's installed, use Device Manager to find out the COM number of the cable. 
  • Once you have that you can start Putty with a Connection type of serial and Serial line of COMx that you found in Device Manager. Once you start the session you will be connected to the Raspberry Pi.

Mac

  • Install the PL2303 drivers for Mac – download the package from here and install it.
  • Once you have installed the driver you should be able to list it in a terminal window:
    •  ls /dev/cu.PL2303* 
  • Connect to the Raspberry Pi (you can tab from PL2303 and the rest of the device name will get filled in). But do remember to add the 115200 speed: 
    • screen /dev/cu.PL2303-xxxxxxxx 115200 
  • Once you execute the screen command you will be connected to the Raspberry Pi 

Configure the wireless adapter (this is WPA2  Personal)


First of all we edit the WPA configuration file:
 
sudo nano /etc/wpa.config

Enter:

network={
ssid=”YOUR_SSID”
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP
psk=”WPA-PASSWORD”
}

And save. 

Set up the wireless interface


Now edit the network interface to configure the wireless network:

sudo nano /etc/network/interfaces

allow-hotplug wlan0

iface wlan0 inet dhcp

wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

And save. 

Start wireless network


Sudo ifup wlan0 (or restart Pi)





Saturday, May 11, 2013

Understanding AVRDude Output

If you've ever had problems getting your sketch or program onto an Arduino board or ATMega chip you may find this post useful. Error messages you may have seen include:
  • avrdude:stk500:_getsync():not in sync:
  • STK500 Failed! 
Not very helpful are they?

In order to understand what's happening we need to know that we have two sides of the communication, on the host machine we have avrdude, a program for communicating with an AVR chip programmer. One of the programmers it supports is the STK500 - an ATMEL standard AVR board including a programmer (now replaced by the STK600). ATMEL have other programmers (AVRISP) and debuggers (DRAGON) which can also be used. 

In the Arduino environment the boot-loader handles the programming task. It does it by simulating a subset of the STK500 programmer. The particular boot-loader  used varies by the board. The Uno uses the optiboot boot-loader. You can find the sources in your Arduino package (optiboot.c). To help understand what follows, look at this extract from stk500.h which defines the various operations that the boot-loader can perform (not all of them are implemented).

/* STK500 constants list, from AVRDUDE */
#define STK_OK              0x10
#define STK_FAILED          0x11  // Not used
#define STK_UNKNOWN         0x12  // Not used
#define STK_NODEVICE        0x13  // Not used
#define STK_INSYNC          0x14  // ' '
#define STK_NOSYNC          0x15  // Not used
#define ADC_CHANNEL_ERROR   0x16  // Not used
#define ADC_MEASURE_OK      0x17  // Not used
#define PWM_CHANNEL_ERROR   0x18  // Not used
#define PWM_ADJUST_OK       0x19  // Not used
#define CRC_EOP             0x20  // 'SPACE'
#define STK_GET_SYNC        0x30  // '0'
#define STK_GET_SIGN_ON     0x31  // '1'
#define STK_SET_PARAMETER   0x40  // '@'
#define STK_GET_PARAMETER   0x41  // 'A'
#define STK_SET_DEVICE      0x42  // 'B'
#define STK_SET_DEVICE_EXT  0x45  // 'E'
#define STK_ENTER_PROGMODE  0x50  // 'P'
#define STK_LEAVE_PROGMODE  0x51  // 'Q'
#define STK_CHIP_ERASE      0x52  // 'R'
#define STK_CHECK_AUTOINC   0x53  // 'S'
#define STK_LOAD_ADDRESS    0x55  // 'U'
#define STK_UNIVERSAL       0x56  // 'V'
#define STK_PROG_FLASH      0x60  // '`'
#define STK_PROG_DATA       0x61  // 'a'
#define STK_PROG_FUSE       0x62  // 'b'
#define STK_PROG_LOCK       0x63  // 'c'
#define STK_PROG_PAGE       0x64  // 'd'
#define STK_PROG_FUSE_EXT   0x65  // 'e'
#define STK_READ_FLASH      0x70  // 'p'
#define STK_READ_DATA       0x71  // 'q'
#define STK_READ_FUSE       0x72  // 'r'
#define STK_READ_LOCK       0x73  // 's'
#define STK_READ_PAGE       0x74  // 't'
#define STK_READ_SIGN       0x75  // 'u'
#define STK_READ_OSCCAL     0x76  // 'v'
#define STK_READ_FUSE_EXT   0x77  // 'w'
#define STK_READ_OSCCAL_EXT 0x78  // 'x'


So how do these get used? First thing to do is switch avrdude verbose output on in the Arduino IDE and you'll get a lot more output. Here's an annotated commentary of the Blink sketch being loaded onto an Uno board. The process is going to be very similar for any other sketch.
-->

Blink Sketch AVRDUDE Ouput


Compilation section





Boot-loader section


avrdude command


/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avrdude -C/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/etc/avrdude.conf -v -v -v -v -patmega328p -carduino -P/dev/tty.usbserial-A501DZOW -b115200 -D -Uflash:w:/var/folders/c_/zfn4h4215bdcv1473qb41j6h0000gn/T/build1586737504844891289.tmp/Blink.cpp.hex:i

This says:


Be really verbose, the part is atmega328p, the programmer is arduino, then the port name, then the USB baud rate setting, disable auto-erase, flash with the blink hex file.


Avrdude output




avrdude: Version 5.11, compiled on Sep  2 2011 at 18:52:52

         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/

         Copyright (c) 2007-2009 Joerg Wunsch



No configuration file (usual for Arduino)




         System wide configuration file is "/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/etc/avrdude.conf"

         User configuration file is "/Users/ian/.avrduderc"

         User configuration file does not exist or is not a regular file, skipping



Name of the port




         Using Port                    : /dev/tty.usbserial-A501DZOW



Using Arduino as programmer

         Using Programmer              : Arduino



Baud rate 115200

         Overriding Baud Rate          : 115200



Is anyone home? Is anyone home? Is anyone home? (STK_GET_SYNC, CRC_EOP)



avrdude: Send: 0 [30]   [20]

avrdude: Send: 0 [30]   [20]

avrdude: Send: 0 [30]   [20]



Next two lines says yes (this is the boot-loaders do nothing response and says you are talking to it)

avrdude: Recv: . [14] (STK_INSYNC, STK_OK)

avrdude: Recv: . [10]



If avrdude does not receive this sequence then you will get the message: avrdude:stk500:_getsync():not in sync: (you can also get this later if avrdude times out waiting for data or confirmation of receipt. If you get this message all you know is that communication is not being made - it does not tell you why. There are, unfortunately, a lot of reasons why you can get this and you need to check all the obvious ones first (I know that you wouldn't make these mistakes but I have at some point or other - make sure you're using right port, baud rate, chip the right way around, tx/rx connections correct, common earth to USB, power to board etc.).

If you're getting correct response at this point then use the output below to identify where your failure is.

This is the data being used to program the part depends on board you have selected.





         AVR Part                      : ATMEGA328P

         Chip Erase delay              : 9000 us

         PAGEL                         : PD7

         BS2                           : PC2

         RESET disposition             : dedicated

         RETRY pulse                   : SCK

         serial program mode           : yes

         parallel program mode         : yes

         Timeout                       : 200

         StabDelay                     : 100

         CmdexeDelay                   : 25

         SyncLoops                     : 32

         ByteDelay                     : 0

         PollIndex                     : 3

         PollValue                     : 0x53

         Memory Detail                 :



                                  Block Poll               Page                       Polled

           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack

           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------

           eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff

                                  Block Poll               Page                       Polled

           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack

           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------

           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff

                                  Block Poll               Page                       Polled

           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack

           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------

           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00

                                  Block Poll               Page                       Polled

           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack

           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------

           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00

                                  Block Poll               Page                       Polled

           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack

           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------

           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00

                                  Block Poll               Page                       Polled

           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack

           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------

           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00

                                  Block Poll               Page                       Polled

           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack

           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------

           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00

                                  Block Poll               Page                       Polled

           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack

           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------

           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00



         Programmer Type : Arduino

         Description     : Arduino



Now start talking to atmega bootloader



Hardware/firmware versions (0x41 STK_GET_PARAMETER)

avrdude: Send: A [41] . [80]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [03] Data byte (hardware version)

avrdude: Recv: . [10]

avrdude: Send: A [41] . [81]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [04] Data byte (firmware version - major)

avrdude: Recv: . [10]

avrdude: Send: A [41] . [82]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [04] Data byte (firmware version – minor)

avrdude: Recv: . [10]

avrdude: Send: A [41] . [98]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [03] Data byte (system clock duration)

avrdude: Recv: . [10]

         Hardware Version: 3

         Firmware Version: 4.4

avrdude: Send: A [41] . [84]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [03]

avrdude: Recv: . [10]

avrdude: Send: A [41] . [85]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [03]

avrdude: Recv: . [10]

avrdude: Send: A [41] . [86]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [03]

avrdude: Recv: . [10]

avrdude: Send: A [41] . [87]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [03]

avrdude: Recv: . [10]

avrdude: Send: A [41] . [89]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [03]

avrdude: Recv: . [10]

         Vtarget         : 0.3 V

Read more settings from chip

   Varef           : 0.3 V

         Oscillator      : 28.800 kHz

         SCK period      : 3.3 us



avrdude: Send: A [41] . [81]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [04]

avrdude: Recv: . [10]

avrdude: Send: A [41] . [82]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [04]

avrdude: Recv: . [10]



Device parameters to initialize (0x42 STK_SET_DEVICE, parms)

avrdude: Send: B [42] . [86] . [00] . [00] . [01] . [01] . [01] . [01] . [03] . [ff] . [ff] . [ff] . [ff] . [00] . [80] . [04] . [00] . [00] . [00] . [80] . [00]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [10]



Magic number sent before entering program mode (0x45 STK_SET_DEVICE_EXT)

avrdude: Send: E [45] . [05] . [04] . [d7] . [c2] . [00]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [10]



Enter program mode (0x50 STK_ENTER_PROGMODE)

avrdude: Send: P [50]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [10]

avrdude: AVR device initialized and ready to accept instructions



OK ready to go – read signature (0x75 STK_READ_SIGN)



Reading | avrdude: Send: u [75]   [20]

avrdude: Recv: . [14] . [1e] . [95] . [0f] . [10]

################################################## | 100% 0.02s

Got device signature



avrdude: Device signature = 0x1e950f



Get software version (0x56 STK_UNIVERSAL)

avrdude: Send: V [56] . [a0] . [03] . [fc] . [00]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [00]

avrdude: Recv: . [10]

avrdude: Send: V [56] . [a0] . [03] . [fd] . [00]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [00]

avrdude: Recv: . [10]

avrdude: Send: V [56] . [a0] . [03] . [fe] . [00]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [00]

avrdude: Recv: . [10]

avrdude: Send: V [56] . [a0] . [03] . [ff] . [00]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [00]

avrdude: Recv: . [10]

avrdude: reading input file "/var/folders/c_/zfn4h4215bdcv1473qb41j6h0000gn/T/build1586737504844891289.tmp/Blink.cpp.hex"





Finally writing flash memory with the hex file



avrdude: writing flash (1026 bytes):



Set flash address (0x55 STK_LOAD_ADDRESS)

Writing | avrdude: Send: U [55] . [00] . [00]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [10]



Write data (0x64, STK_PROG_PAGE)

avrdude: Send: d [64] . [00] . [80] F [46] . [0c] . [94] a [61] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] . [9a] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [00] . [00] . [00] . [00] $ [24] . [00] ' [27] . [00] * [2a] . [00] . [00] . [00] . [00] . [00] % [25] . [00] ( [28] . [00] + [2b] . [00] . [00] . [00] . [00] . [00]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [10]



###### (0x55 STK_LOAD_ADDRESS, repeated until complete)

avrdude: Send: U [55] @ [40] . [00]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [10]

avrdude: Send: d [64] . [00] . [80] F [46] # [23] . [00] & [26] . [00] ) [29] . [00] . [04] . [04] . [04] . [04] . [04] . [04] . [04] . [04] . [02] . [02] . [02] . [02] . [02] . [02] . [03] . [03] . [03] . [03] . [03] . [03] . [01] . [02] . [04] . [08] . [10]   [20] @ [40] . [80] . [01] . [02] . [04] . [08] . [10]   [20] . [01] . [02] . [04] . [08] . [10]   [20] . [00] . [00] . [00] . [07] . [00] . [02] . [01] . [00] . [00] . [03] . [04] . [06] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [11] $ [24] . [1f] . [be] . [cf] . [ef] . [d8] . [e0] . [de] . [bf] . [cd] . [bf] . [11] . [e0] . [a0] . [e0] . [b1] . [e0] . [e2] . [e0] . [f4] . [e0] . [02] . [c0] . [05] . [90] . [0d] . [92] . [a0] 0 [30] . [b1] . [07] . [d9] . [f7] . [11] . [e0] . [a0] . [e0] . [b1] . [e0] . [01] . [c0] . [1d] . [92] . [a9] 0 [30] . [b1] . [07] . [e1] . [f7] . [0e] . [94] . [f0] . [01] . [0c] . [94] . [ff] . [01] . [0c] . [94] . [00] . [00]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [10]



######avrdude: Send: U [55] . [80] . [00]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [10]

avrdude: Send: d [64] . [00] . [80] F [46] . [8d] . [e0] a [61] . [e0] . [0e] . [94] . [9c] . [01] h [68] . [ee] s [73] . [e0] . [80] . [e0] . [90] . [e0] . [0e] . [94] . [e2] . [00] . [8d] . [e0] ` [60] . [e0] . [0e] . [94] . [9c] . [01] h [68] . [ee] s [73] . [e0] . [80] . [e0] . [90] . [e0] . [0e] . [94] . [e2] . [00] . [08] . [95] . [8d] . [e0] a [61] . [e0] . [0e] . [94] v [76] . [01] . [08] . [95] . [1f] . [92] . [0f] . [92] . [0f] . [b6] . [0f] . [92] . [11] $ [24] / [2f] . [93] ? [3f] . [93] . [8f] . [93] . [9f] . [93] . [af] . [93] . [bf] . [93] . [80] . [91] . [04] . [01] . [90] . [91] . [05] . [01] . [a0] . [91] . [06] . [01] . [b0] . [91] . [07] . [01] 0 [30] . [91] . [08] . [01] . [01] . [96] . [a1] . [1d] . [b1] . [1d] # [23] / [2f] - [2d] _ [5f] - [2d] 7 [37]   [20] . [f0] - [2d] W [57] . [01] . [96] . [a1] . [1d] . [b1] . [1d]   [20] . [93] . [08] . [01] . [80] . [93] . [04] . [01] . [90] . [93] . [05] . [01]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [10]

######avrdude: Send: U [55] . [c0] . [00]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [10]

avrdude: Send: d [64] . [00] . [80] F [46] . [a0] . [93] . [06] . [01] . [b0] . [93] . [07] . [01] . [80] . [91] . [00] . [01] . [90] . [91] . [01] . [01] . [a0] . [91] . [02] . [01] . [b0] . [91] . [03] . [01] . [01] . [96] . [a1] . [1d] . [b1] . [1d] . [80] . [93] . [00] . [01] . [90] . [93] . [01] . [01] . [a0] . [93] . [02] . [01] . [b0] . [93] . [03] . [01] . [bf] . [91] . [af] . [91] . [9f] . [91] . [8f] . [91] ? [3f] . [91] / [2f] . [91] . [0f] . [90] . [0f] . [be] . [0f] . [90] . [1f] . [90] . [18] . [95] . [9b] . [01] . [ac] . [01] . [7f] . [b7] . [f8] . [94] . [80] . [91] . [00] . [01] . [90] . [91] . [01] . [01] . [a0] . [91] . [02] . [01] . [b0] . [91] . [03] . [01] f [66] . [b5] . [a8] . [9b] . [05] . [c0] o [6f] ? [3f] . [19] . [f0] . [01] . [96] . [a1] . [1d] . [b1] . [1d] . [7f] . [bf] . [ba] / [2f] . [a9] / [2f] . [98] / [2f] . [88] ' [27] . [86] . [0f] . [91] . [1d] . [a1] . [1d] . [b1] . [1d] b [62] . [e0]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [10]

######avrdude: Send: U [55] . [00] . [01]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [10]

avrdude: Send: d [64] . [00] . [80] F [46] . [88] . [0f] . [99] . [1f] . [aa] . [1f] . [bb] . [1f] j [6a] . [95] . [d1] . [f7] . [bc] . [01] - [2d] . [c0] . [ff] . [b7] . [f8] . [94] . [80] . [91] . [00] . [01] . [90] . [91] . [01] . [01] . [a0] . [91] . [02] . [01] . [b0] . [91] . [03] . [01] . [e6] . [b5] . [a8] . [9b] . [05] . [c0] . [ef] ? [3f] . [19] . [f0] . [01] . [96] . [a1] . [1d] . [b1] . [1d] . [ff] . [bf] . [ba] / [2f] . [a9] / [2f] . [98] / [2f] . [88] ' [27] . [8e] . [0f] . [91] . [1d] . [a1] . [1d] . [b1] . [1d] . [e2] . [e0] . [88] . [0f] . [99] . [1f] . [aa] . [1f] . [bb] . [1f] . [ea] . [95] . [d1] . [f7] . [86] . [1b] . [97] . [0b] . [88] ^ [5e] . [93] @ [40] . [c8] . [f2] ! [21] P [50] 0 [30] @ [40] @ [40] @ [40] P [50] @ [40] h [68] Q [51] | [7c] O [4f] ! [21] . [15] 1 [31] . [05] A [41] . [05] Q [51] . [05] q [71] . [f6] . [08] . [95] x [78] . [94] . [84] . [b5] . [82] ` [60] . [84] . [bd] . [84] . [b5]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [10]

#######avrdude: Send: U [55] @ [40] . [01]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [10]

avrdude: Send: d [64] . [00] . [80] F [46] . [81] ` [60] . [84] . [bd] . [85] . [b5] . [82] ` [60] . [85] . [bd] . [85] . [b5] . [81] ` [60] . [85] . [bd] . [ee] . [e6] . [f0] . [e0] . [80] . [81] . [81] ` [60] . [80] . [83] . [e1] . [e8] . [f0] . [e0] . [10] . [82] . [80] . [81] . [82] ` [60] . [80] . [83] . [80] . [81] . [81] ` [60] . [80] . [83] . [e0] . [e8] . [f0] . [e0] . [80] . [81] . [81] ` [60] . [80] . [83] . [e1] . [eb] . [f0] . [e0] . [80] . [81] . [84] ` [60] . [80] . [83] . [e0] . [eb] . [f0] . [e0] . [80] . [81] . [81] ` [60] . [80] . [83] . [ea] . [e7] . [f0] . [e0] . [80] . [81] . [84] ` [60] . [80] . [83] . [80] . [81] . [82] ` [60] . [80] . [83] . [80] . [81] . [81] ` [60] . [80] . [83] . [80] . [81] . [80] h [68] . [80] . [83] . [10] . [92] . [c1] . [00] . [08] . [95] H [48] / [2f] P [50] . [e0] . [ca] . [01] . [86] V [56] . [9f] O [4f] . [fc] . [01] $ [24] . [91] J [4a] W [57] _ [5f] O [4f] . [fa] . [01]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [10]

######avrdude: Send: U [55] . [80] . [01]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [10]

avrdude: Send: d [64] . [00] . [80] F [46] . [84] . [91] . [88] # [23] . [c1] . [f0] . [e8] / [2f] . [f0] . [e0] . [ee] . [0f] . [ff] . [1f] . [e8] Y [59] . [ff] O [4f] . [a5] . [91] . [b4] . [91] f [66] # [23] A [41] . [f4] . [9f] . [b7] . [f8] . [94] . [8c] . [91]   [20] . [95] . [82] # [23] . [8c] . [93] . [9f] . [bf] . [08] . [95] . [9f] . [b7] . [f8] . [94] . [8c] . [91] . [82] + [2b] . [8c] . [93] . [9f] . [bf] . [08] . [95] H [48] / [2f] P [50] . [e0] . [ca] . [01] . [82] U [55] . [9f] O [4f] . [fc] . [01] $ [24] . [91] . [ca] . [01] . [86] V [56] . [9f] O [4f] . [fc] . [01] . [94] . [91] J [4a] W [57] _ [5f] O [4f] . [fa] . [01] 4 [34] . [91] 3 [33] # [23] . [09] . [f4] @ [40] . [c0] " [22] # [23] Q [51] . [f1] # [23] 0 [30] q [71] . [f0] $ [24] 0 [30] ( [28] . [f4] ! [21] 0 [30] . [a1] . [f0] " [22] 0 [30] . [11] . [f5] . [14] . [c0] & [26] 0 [30] . [b1] . [f0] ' [27] 0 [30] . [c1] . [f0] $ [24] 0 [30] . [d9] . [f4]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [10]

######avrdude: Send: U [55] . [c0] . [01]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [10]

avrdude: Send: d [64] . [00] . [80] F [46] . [04] . [c0] . [80] . [91] . [80] . [00] . [8f] w [77] . [03] . [c0] . [80] . [91] . [80] . [00] . [8f] } [7d] . [80] . [93] . [80] . [00] . [10] . [c0] . [84] . [b5] . [8f] w [77] . [02] . [c0] . [84] . [b5] . [8f] } [7d] . [84] . [bd] . [09] . [c0] . [80] . [91] . [b0] . [00] . [8f] w [77] . [03] . [c0] . [80] . [91] . [b0] . [00] . [8f] } [7d] . [80] . [93] . [b0] . [00] . [e3] / [2f] . [f0] . [e0] . [ee] . [0f] . [ff] . [1f] . [ee] X [58] . [ff] O [4f] . [a5] . [91] . [b4] . [91] / [2f] . [b7] . [f8] . [94] f [66] # [23] ! [21] . [f4] . [8c] . [91] . [90] . [95] . [89] # [23] . [02] . [c0] . [8c] . [91] . [89] + [2b] . [8c] . [93] / [2f] . [bf] . [08] . [95] . [cf] . [93] . [df] . [93] . [0e] . [94] ; [3b] . [01] . [0e] . [94] . [95] . [00] . [c0] . [e0] . [d0] . [e0] . [0e] . [94] . [80] . [00]   [20] . [97] . [e1] . [f3] . [0e] . [94] . [00] . [00] . [f9] . [cf] . [f8] . [94]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [10]

######avrdude: Send: U [55] . [00] . [02]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [10]

avrdude: Send: d [64] . [00] . [02] F [46] . [ff] . [cf]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [10]

# | 100% 0.41s



avrdude: 1026 bytes of flash written

avrdude: verifying flash memory against /var/folders/c_/zfn4h4215bdcv1473qb41j6h0000gn/T/build1586737504844891289.tmp/Blink.cpp.hex:

avrdude: load data flash data from input file /var/folders/c_/zfn4h4215bdcv1473qb41j6h0000gn/T/build1586737504844891289.tmp/Blink.cpp.hex:

avrdude: input file /var/folders/c_/zfn4h4215bdcv1473qb41j6h0000gn/T/build1586737504844891289.tmp/Blink.cpp.hex contains 1026 bytes





Now verify



avrdude: reading on-chip flash data:



Set flash address

Reading | avrdude: Send: U [55] . [00] . [00]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [10]



Read data (0x74 STK_READ_PAGE, repeated until complete)

avrdude: Send: t [74] . [00] . [80] F [46]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [0c] . [94] a [61] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] . [9a] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [0c] . [94] ~ [7e] . [00] . [00] . [00] . [00] . [00] $ [24] . [00] ' [27] . [00] * [2a] . [00] . [00] . [00] . [00] . [00] % [25] . [00] ( [28] . [00] + [2b] . [00] . [00] . [00] . [00] . [00]

avrdude: Recv: . [10]

######avrdude: Send: U [55] @ [40] . [00]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [10]

avrdude: Send: t [74] . [00] . [80] F [46]   [20]

avrdude: Recv: . [14]

avrdude: Recv: # [23] . [00] & [26] . [00] ) [29] . [00] . [04] . [04] . [04] . [04] . [04] . [04] . [04] . [04] . [02] . [02] . [02] . [02] . [02] . [02] . [03] . [03] . [03] . [03] . [03] . [03] . [01] . [02] . [04] . [08] . [10]   [20] @ [40] . [80] . [01] . [02] . [04] . [08] . [10]   [20] . [01] . [02] . [04] . [08] . [10]   [20] . [00] . [00] . [00] . [07] . [00] . [02] . [01] . [00] . [00] . [03] . [04] . [06] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [00] . [11] $ [24] . [1f] . [be] . [cf] . [ef] . [d8] . [e0] . [de] . [bf] . [cd] . [bf] . [11] . [e0] . [a0] . [e0] . [b1] . [e0] . [e2] . [e0] . [f4] . [e0] . [02] . [c0] . [05] . [90] . [0d] . [92] . [a0] 0 [30] . [b1] . [07] . [d9] . [f7] . [11] . [e0] . [a0] . [e0] . [b1] . [e0] . [01] . [c0] . [1d] . [92] . [a9] 0 [30] . [b1] . [07] . [e1] . [f7] . [0e] . [94] . [f0] . [01] . [0c] . [94] . [ff] . [01] . [0c] . [94] . [00] . [00]

avrdude: Recv: . [10]

######avrdude: Send: U [55] . [80] . [00]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [10]

avrdude: Send: t [74] . [00] . [80] F [46]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [8d] . [e0] a [61] . [e0] . [0e] . [94] . [9c] . [01] h [68] . [ee] s [73] . [e0] . [80] . [e0] . [90] . [e0] . [0e] . [94] . [e2] . [00] . [8d] . [e0] ` [60] . [e0] . [0e] . [94] . [9c] . [01] h [68] . [ee] s [73] . [e0] . [80] . [e0] . [90] . [e0] . [0e] . [94] . [e2] . [00] . [08] . [95] . [8d] . [e0] a [61] . [e0] . [0e] . [94] v [76] . [01] . [08] . [95] . [1f] . [92] . [0f] . [92] . [0f] . [b6] . [0f] . [92] . [11] $ [24] / [2f] . [93] ? [3f] . [93] . [8f] . [93] . [9f] . [93] . [af] . [93] . [bf] . [93] . [80] . [91] . [04] . [01] . [90] . [91] . [05] . [01] . [a0] . [91] . [06] . [01] . [b0] . [91] . [07] . [01] 0 [30] . [91] . [08] . [01] . [01] . [96] . [a1] . [1d] . [b1] . [1d] # [23] / [2f] - [2d] _ [5f] - [2d] 7 [37]   [20] . [f0] - [2d] W [57] . [01] . [96] . [a1] . [1d] . [b1] . [1d]   [20] . [93] . [08] . [01] . [80] . [93] . [04] . [01] . [90] . [93] . [05] . [01]

avrdude: Recv: . [10]

######avrdude: Send: U [55] . [c0] . [00]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [10]

avrdude: Send: t [74] . [00] . [80] F [46]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [a0] . [93] . [06] . [01] . [b0] . [93] . [07] . [01] . [80] . [91] . [00] . [01] . [90] . [91] . [01] . [01] . [a0] . [91] . [02] . [01] . [b0] . [91] . [03] . [01] . [01] . [96] . [a1] . [1d] . [b1] . [1d] . [80] . [93] . [00] . [01] . [90] . [93] . [01] . [01] . [a0] . [93] . [02] . [01] . [b0] . [93] . [03] . [01] . [bf] . [91] . [af] . [91] . [9f] . [91] . [8f] . [91] ? [3f] . [91] / [2f] . [91] . [0f] . [90] . [0f] . [be] . [0f] . [90] . [1f] . [90] . [18] . [95] . [9b] . [01] . [ac] . [01] . [7f] . [b7] . [f8] . [94] . [80] . [91] . [00] . [01] . [90] . [91] . [01] . [01] . [a0] . [91] . [02] . [01] . [b0] . [91] . [03] . [01] f [66] . [b5] . [a8] . [9b] . [05] . [c0] o [6f] ? [3f] . [19] . [f0] . [01] . [96] . [a1] . [1d] . [b1] . [1d] . [7f] . [bf] . [ba] / [2f] . [a9] / [2f] . [98] / [2f] . [88] ' [27] . [86] . [0f] . [91] . [1d] . [a1] . [1d] . [b1] . [1d] b [62] . [e0]

avrdude: Recv: . [10]

######avrdude: Send: U [55] . [00] . [01]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [10]

avrdude: Send: t [74] . [00] . [80] F [46]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [88] . [0f] . [99] . [1f] . [aa] . [1f] . [bb] . [1f] j [6a] . [95] . [d1] . [f7] . [bc] . [01] - [2d] . [c0] . [ff] . [b7] . [f8] . [94] . [80] . [91] . [00] . [01] . [90] . [91] . [01] . [01] . [a0] . [91] . [02] . [01] . [b0] . [91] . [03] . [01] . [e6] . [b5] . [a8] . [9b] . [05] . [c0] . [ef] ? [3f] . [19] . [f0] . [01] . [96] . [a1] . [1d] . [b1] . [1d] . [ff] . [bf] . [ba] / [2f] . [a9] / [2f] . [98] / [2f] . [88] ' [27] . [8e] . [0f] . [91] . [1d] . [a1] . [1d] . [b1] . [1d] . [e2] . [e0] . [88] . [0f] . [99] . [1f] . [aa] . [1f] . [bb] . [1f] . [ea] . [95] . [d1] . [f7] . [86] . [1b] . [97] . [0b] . [88] ^ [5e] . [93] @ [40] . [c8] . [f2] ! [21] P [50] 0 [30] @ [40] @ [40] @ [40] P [50] @ [40] h [68] Q [51] | [7c] O [4f] ! [21] . [15] 1 [31] . [05] A [41] . [05] Q [51] . [05] q [71] . [f6] . [08] . [95] x [78] . [94] . [84] . [b5] . [82] ` [60] . [84] . [bd] . [84] . [b5]

avrdude: Recv: . [10]

#######avrdude: Send: U [55] @ [40] . [01]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [10]

avrdude: Send: t [74] . [00] . [80] F [46]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [81] ` [60] . [84] . [bd] . [85] . [b5] . [82] ` [60] . [85] . [bd] . [85] . [b5] . [81] ` [60] . [85] . [bd] . [ee] . [e6] . [f0] . [e0] . [80] . [81] . [81] ` [60] . [80] . [83] . [e1] . [e8] . [f0] . [e0] . [10] . [82] . [80] . [81] . [82] ` [60] . [80] . [83] . [80] . [81] . [81] ` [60] . [80] . [83] . [e0] . [e8] . [f0] . [e0] . [80] . [81] . [81] ` [60] . [80] . [83] . [e1] . [eb] . [f0] . [e0] . [80] . [81] . [84] ` [60] . [80] . [83] . [e0] . [eb] . [f0] . [e0] . [80] . [81] . [81] ` [60] . [80] . [83] . [ea] . [e7] . [f0] . [e0] . [80] . [81] . [84] ` [60] . [80] . [83] . [80] . [81] . [82] ` [60] . [80] . [83] . [80] . [81] . [81] ` [60] . [80] . [83] . [80] . [81] . [80] h [68] . [80] . [83] . [10] . [92] . [c1] . [00] . [08] . [95] H [48] / [2f] P [50] . [e0] . [ca] . [01] . [86] V [56] . [9f] O [4f] . [fc] . [01] $ [24] . [91] J [4a] W [57] _ [5f] O [4f] . [fa] . [01]

avrdude: Recv: . [10]

######avrdude: Send: U [55] . [80] . [01]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [10]

avrdude: Send: t [74] . [00] . [80] F [46]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [84] . [91] . [88] # [23] . [c1] . [f0] . [e8] / [2f] . [f0] . [e0] . [ee] . [0f] . [ff] . [1f] . [e8] Y [59] . [ff] O [4f] . [a5] . [91] . [b4] . [91] f [66] # [23] A [41] . [f4] . [9f] . [b7] . [f8] . [94] . [8c] . [91]   [20] . [95] . [82] # [23] . [8c] . [93] . [9f] . [bf] . [08] . [95] . [9f] . [b7] . [f8] . [94] . [8c] . [91] . [82] + [2b] . [8c] . [93] . [9f] . [bf] . [08] . [95] H [48] / [2f] P [50] . [e0] . [ca] . [01] . [82] U [55] . [9f] O [4f] . [fc] . [01] $ [24] . [91] . [ca] . [01] . [86] V [56] . [9f] O [4f] . [fc] . [01] . [94] . [91] J [4a] W [57] _ [5f] O [4f] . [fa] . [01] 4 [34] . [91] 3 [33] # [23] . [09] . [f4] @ [40] . [c0] " [22] # [23] Q [51] . [f1] # [23] 0 [30] q [71] . [f0] $ [24] 0 [30] ( [28] . [f4] ! [21] 0 [30] . [a1] . [f0] " [22] 0 [30] . [11] . [f5] . [14] . [c0] & [26] 0 [30] . [b1] . [f0] ' [27] 0 [30] . [c1] . [f0] $ [24] 0 [30] . [d9] . [f4]

avrdude: Recv: . [10]

######avrdude: Send: U [55] . [c0] . [01]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [10]

avrdude: Send: t [74] . [00] . [80] F [46]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [04] . [c0] . [80] . [91] . [80] . [00] . [8f] w [77] . [03] . [c0] . [80] . [91] . [80] . [00] . [8f] } [7d] . [80] . [93] . [80] . [00] . [10] . [c0] . [84] . [b5] . [8f] w [77] . [02] . [c0] . [84] . [b5] . [8f] } [7d] . [84] . [bd] . [09] . [c0] . [80] . [91] . [b0] . [00] . [8f] w [77] . [03] . [c0] . [80] . [91] . [b0] . [00] . [8f] } [7d] . [80] . [93] . [b0] . [00] . [e3] / [2f] . [f0] . [e0] . [ee] . [0f] . [ff] . [1f] . [ee] X [58] . [ff] O [4f] . [a5] . [91] . [b4] . [91] / [2f] . [b7] . [f8] . [94] f [66] # [23] ! [21] . [f4] . [8c] . [91] . [90] . [95] . [89] # [23] . [02] . [c0] . [8c] . [91] . [89] + [2b] . [8c] . [93] / [2f] . [bf] . [08] . [95] . [cf] . [93] . [df] . [93] . [0e] . [94] ; [3b] . [01] . [0e] . [94] . [95] . [00] . [c0] . [e0] . [d0] . [e0] . [0e] . [94] . [80] . [00]   [20] . [97] . [e1] . [f3] . [0e] . [94] . [00] . [00] . [f9] . [cf] . [f8] . [94]

avrdude: Recv: . [10]

######avrdude: Send: U [55] . [00] . [02]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [10]

avrdude: Send: t [74] . [00] . [02] F [46]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [ff] . [cf]

avrdude: Recv: . [10]

# | 100% 0.38s



avrdude: verifying ...

avrdude: 1026 bytes of flash verified



Quit (0x51 STK_LEAVE_PROGMODE)

avrdude: Send: Q [51]   [20]

avrdude: Recv: . [14]

avrdude: Recv: . [10]



avrdude done.  Thank you.