Close

Serial Port with Pi Zero W

A project log for ICSP

Pi Zero as a host to do In-Circuit Serial Programming of AVR’s

ronaldsutherlandronald.sutherland 05/18/2019 at 19:070 Comments
Linux icsp1 4.14.98+ #1200 Tue Feb 12 20:11:02 GMT 2019 armv6l

RTS and CTS handshake is only valid with uart0, so I need to use the Alt0 pin functions. Unfortunately, raspi-config cannot change the config file at this time.

sudo systemctl list-units hciuart
sudo systemctl disable hciuart
sudo nano /boot/config.txt 
dtoverlay=pi3-disable-bt
# Alt0 pin function
dtoverlay=uart0,pin_func=4
# raspi-config can set enable_uart
enable_uart=1

As the R-Pi Zero W boots up the D1 green LED is dimly lit. Once the overlay is applied D1 turns off, the R-Pi pin has 1.6V at power on and does sink some current. It is acceptable for this application, but that is not how the AVR's or PIC's that I have used power up.

I did a script so that I can push the bootload button (S1) and run the make bootload rule. I run that script after setting the working folder to the location with the make rule (e.g., change directory to the folder with Makefile).

Next I have a bootload rule in the RPUno i2c-debug application's Makefile.

bootload:
    avrdude -v -p $(MCU) -c arduino -P $(BOOTLOAD_PORT) -b 38400 -U flash:w:$(TARGET).hex

Then ran this bootld.py script on the working folder with that Makefile.

https://github.com/epccs/Driver/tree/master/ICSP/Bootload

# build the hex file
make
# run script 
python ~/bin/bootld.py
rsutherland dialout gpio spi
rsutherland dialout gpio spi
avrdude -v -p atmega328p -c arduino -P /dev/ttyAMA0 -b 38400 -U flash:w:I2c-debug.hex

avrdude: Version 6.3-20171130         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/         Copyright (c) 2007-2014 Joerg Wunsch
         System wide configuration file is "/etc/avrdude.conf"         User configuration file is "/home/rsutherland/.avrduderc"         User configuration file does not exist or is not a regular file, skipping
         Using Port                    : /dev/ttyAMA0         Using Programmer              : arduino         Overriding Baud Rate          : 38400         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           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
         Programmer Type : Arduino         Description     : Arduino         Hardware Version: 3         Firmware Version: 6.2         Vtarget         : 0.3 V         Varef           : 0.3 V         Oscillator      : 28.800 kHz         SCK period      : 3.3 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: safemode: lfuse reads as 0
avrdude: safemode: hfuse reads as 0
avrdude: safemode: efuse reads as 0
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "I2c-debug.hex"
avrdude: input file I2c-debug.hex auto detected as Intel Hex
avrdude: writing flash (8692 bytes):

Writing | ################################################## | 100% 3.28s

avrdude: 8692 bytes of flash written
avrdude: verifying flash memory against I2c-debug.hex:
avrdude: load data flash data from input file I2c-debug.hex:
avrdude: input file I2c-debug.hex auto detected as Intel Hex
avrdude: input file I2c-debug.hex contains 8692 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 2.69s

avrdude: verifying ...
avrdude: 8692 bytes of flash verified

avrdude: safemode: lfuse reads as 0
avrdude: safemode: hfuse reads as 0
avrdude: safemode: efuse reads as 0
avrdude: safemode: Fuses OK (E:00, H:00, L:00)

avrdude done.  Thank you.

icsp_pin falling event occured so use_icsp_pin_to_stop flag cleared
press bootload_pin again to end program
make clean

ICSPbootloadingRPUno

I am impressed with how easy it was to automate this; the toil of tracking hex files was what I have seen and was expecting based on that experience, but going from source in the repository to binary upload all within the tool is satisfying.

Discussions