Skip to content

This is the fast avr programmer for AVR MCUs based on stm32f407vet6 board with usb-to-serial support.

License

Notifications You must be signed in to change notification settings

feer9/FASTUSBasp

 
 

Repository files navigation

FASTUSBasp programmer for AVR Microcontrollers

Join the chat at https://gitter.im/FASTUSBasp/Lobby

This is the fast ISP programmer for AVR MCUs based on stm32f407vet6 board with usb-to-serial support.

Reference

This project is a fork to amitesh-singh Blue Pill's FASTUSBasp
Thanks to him for the original project

How to flash the firmware

First, you need to download the binary file from the Releases page.
Then you will have to flash it following one of the next options:

Using STLINK

Connect st-link programmer to stm32 and upload the firmware
Once you connect the hardware you can use one of the next utilities

stlink (open-source)

You can download this tool from the github repo: link

If you're in Arch Linux you can install the utility from the official repositories:

$ sudo pacman -Syu stlink

And flash the firmware with the st-flash CLI, or the GUI from the same project

$ st-flash write fastusbaspv2.bin 0x08000000

or just

$ make fastusbasp-upload

STM32CubeProgrammer

This is the official tool from STMicroelectronics, you can download it from their official page

Using serial port

Install stm32flash utility on linux.
To program stm32f407 via USART, you need to set BOOT0 as 1
and leave BOOT1 as 0.

Connect any usb to uart converter device and connect PA9 to RXD and PA10 to TXD
and connect GND.

$ make fastusbasp-serialupload

Compile from source

Refer amitesh-singh's post on how to setup stm32 devlopment environment on Arch linux.
http://amitesh-singh.github.io/stm32/2017/04/09/setting-stm32-dev-environment-arch-linux.html

Make sure you have compiled libopencm3 library.

$ git clone https://github.com/feer9/FASTUSBasp
$ nano config.cmake  # set the libopencm3 path here
$ cmake .
$ make

You can also use meson and ninja

$ meson . builddir --cross-file cross-file.txt  --buildtype=minsize "$@"
$ ninja -C builddir bin

How to use

ISP connections

You'll use SPI1 to communicate to AVR.

STM32F407 AVR
PB5 MOSI
PB4 MISO
PB3 SCK
PB8 RST
5v or 3.3v 5v
GND GND

Serial connections

Serial ports are PA10(RX) and PA9 (TX).
This can be used to debug AVR Microcontrollers.

STM32F407 AVR
PA10 TX
PA9 RX

All pins SPI2(PB5, PB4, PB3), Serial(PA10, PA9) and RST(PB8) used are 5V tolerant.

udev rule

Refer to udev/README.md

Plugging to PC

Linux

When you plug this device to PC, you should get following message ondmesg -wH

[Jan20 13:31] usb 3-1.1: new full-speed USB device number 5 using xhci_hcd
[  +0.107774] usb 3-1.1: New USB device found, idVendor=16c0, idProduct=05dc
[  +0.000004] usb 3-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  +0.000002] usb 3-1.1: Product: fastusbasp
[  +0.000002] usb 3-1.1: Manufacturer: http://amitesh-singh.github.io
[  +0.000001] usb 3-1.1: SerialNumber: AARAV
[  +0.040797] cdc_acm 3-1.1:1.0: ttyACM0: USB ACM device
[  +0.000804] usbcore: registered new interface driver cdc_acm
[  +0.000000] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters

/dev/ttyACM0 is the serial port.

Windows

  • Download Zadig (https://zadig.akeo.ie/)
  • Insert device to USB. Wait until windows can't install it.
  • Launch Zadig
  • Select in Zadig our device from ComboBox
  • Select driver Type libusbK
  • Press Install Driver
  • Wait until Zadig is done with installing driver and that results into Windows to detect the device.

Probe AVR

$ avrdude -c usbasp-clone -p m16

avrdude: AVR device initialized and ready to accept instructions

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

avrdude: Device signature = 0x1e9403 (probably m16)

avrdude: safemode: Fuses OK (E:FF, H:D8, L:CF)

avrdude done.  Thank you.

Upload program to AVR

$ avrdude -c usbasp-clone -p m16 -U flash:w:blink.hex

avrdude: AVR device initialized and ready to accept instructions

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

avrdude: Device signature = 0x1e9403 (probably m16)
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 "blink.hex"
avrdude: input file blink.hex auto detected as Intel Hex
avrdude: writing flash (150 bytes):

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

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

Reading | ################################################## | 100% 0.01s

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

avrdude: safemode: Fuses OK (E:FF, H:D8, L:CF)

avrdude done.  Thank you.

Read flash

$ avrdude -c usbasp-clone -p m16 -U flash:r:flash.bin:r

avrdude: AVR device initialized and ready to accept instructions

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

avrdude: Device signature = 0x1e9403 (probably m16)
avrdude: reading flash memory:

Reading | ################################################## | 100% 0.33s

avrdude: writing output file "flash.bin"

avrdude: safemode: Fuses OK (E:FF, H:D8, L:CF)

avrdude done.  Thank you.

$ hexdump flash.bin 
0000000 c029 0000 c02f 0000 c02d 0000 c02b 0000
0000010 c029 0000 c027 0000 c025 0000 c023 0000
0000020 c021 0000 c01f 0000 c01d 0000 c01b 0000
0000030 c019 0000 c017 0000 c015 0000 c013 0000
0000040 c011 0000 c00f 0000 c00d 0000 c00b 0000
0000050 c009 0000 2411 be1f e5cf e0d4 bfde bfcd
0000060 d002 c017 cfcd 9ab8 9ac0 ef2f ed83 e390
0000070 5021 4080 4090 f7e1 c000 0000 98c0 ef2f
0000080 ed83 e390 5021 4080 4090 f7e1 c000 0000
0000090 cfeb 94f8 cfff                         

Flash Read/Write speed

Flash Write speed: 15 KBps
Flash Read Speed: 52.5 KBps

Bit clock speed

FASTUSBasp starts out with a fast ISP clock frequency (default: 3 MHz), so the -B bitclock option might be required to achieve stable communication in case target MCU F_CPU is bit low < 12MHz

Supported bitclock speed

  • default (without -B): 3 MHz
  • 1.5 MHz
  • 750 KHz
  • 375 KHz
  • 187.5 KHz

Useful Links

Packages

No packages published

Languages

  • C++ 53.7%
  • C 33.4%
  • CMake 8.7%
  • Meson 3.7%
  • Shell 0.5%