https://github.com/dioannidis/usbasp
usbasp improved firmware
https://github.com/dioannidis/usbasp
avr avr-microcontroller hid uart uart-bridge uart-interface usbasp usbasp-firmware
Last synced: 24 days ago
JSON representation
usbasp improved firmware
- Host: GitHub
- URL: https://github.com/dioannidis/usbasp
- Owner: dioannidis
- License: gpl-2.0
- Created: 2021-02-26T15:11:08.000Z (about 4 years ago)
- Default Branch: master
- Last Pushed: 2024-08-05T14:42:24.000Z (9 months ago)
- Last Synced: 2024-11-05T11:42:23.346Z (6 months ago)
- Topics: avr, avr-microcontroller, hid, uart, uart-bridge, uart-interface, usbasp, usbasp-firmware
- Language: C
- Homepage:
- Size: 4.73 MB
- Stars: 76
- Watchers: 9
- Forks: 12
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Changelog: Changelog.txt
- License: LICENSE
Awesome Lists containing this project
README
# usbasp improved
### _WCID compliant_, _HID UART support_This USBasp firmware is based on [a fork by Ralph Doncaster]. Original fork readme can be found at README_nerdralph.md.
### Features
- From version 1.07 a default SCK clock of 1.5Mhz and automatic SCK slowing if target does not respond. PORTD is left as input, so this firmware also works [with USBISP modules]. ( nerdralph )
- From version 1.08 the firmware is [WCID] compliant, meaning it should work on Windows without any driver or .inf install.
- From version 1.09 a ( reliable at 9600 Baud, with 120ms - 160ms intervals for higher speeds see note at UART HID protocol ) UART HID implementation is added for debugging purposes. USBasp will appear as a composite device with a WINUSB interface and a HID interface.
- From version 1.10 USBasp WCID switch to Microsoft OS 2.0 Descriptors. It seems that it play better with USB 3.0 ports.
- From version 1.11 USBasp supports updating it's serial number ( see [USBaspHIDUART utility] ) and also adds support for the AT89S51/2 ICs.### Avrdude
Avrdude v7+ official windows binary from [avrdudes/avrdude] uses libwinusb instead of libusb, which doesn't support composite devices as this firmware implements. Please use the unofficial build using mingw64 ( avrdude-v7.2_mingw64 ) from [mcuee] repo.
### UART GUI Client
From release v0.7.0, the [libUSBUARTTerminal] supports this firmware's HID UART implementation.
### UART HID protocol
> Note: There is a small 128 byte ring buffer for both Tx and Rx. That means you can use higher baud rates ( i.e. 115200 ) if the message length is smaller than 128 bytes and the transmit / receive interval is 160 ms or higher.
##### _Serial Data_
V-USB implementation uses 8 byte size input and output interrupt reports.
The last byte ( 8th ) has special meaning. Its serial data or its the serial bytes count. If its value is greater than 7 then its serial data. If the value is 7 or smaller then its the serial data count and the remaining bytes are ignored.
_Input Reports ( USBasp -> USB PC )_ or _Output Reports ( USB PC -> USBasp)_
i.e.
```sh
0x55,0x34,0x00,0x00,0x00,0x00,0x00,0x02 -> Actual serial bytes 2 : 0x55,0x340x00,0x34,0x00,0x66,0x32,0x36,0x00,0x04 -> Actual serial bytes 4 : 0x00,0x34,0x00,0x66
0x00,0xC3,0x34,0x55,0x32,0xF3,0x00,0xAB -> Actual serial bytes 8 ( 8th byte > 7 ) : 0x00,0xC3,0x34,0x55,0x32,0xF3,0x00,0xAB
```##### _UART Configuration_
The USBasp's UART configuration uses an 8 byte size feature report, with the following format.
| Byte 0 | Byte 1 | Byte 2 | Byte 3 | Byte 4 - 7 RO |
| -------- | --------- | -------- | -------- | -------- |
| Prescaler Low Byte | Prescaler High Byte | See [UART Flags] | Unused | USBasp Capabilities |To setup and enable the UART, send a feature set report, with the prescaler in the first two bytes and the parity, data bit, stop bit flags at the third byte ( see [UART Flags] ). The fourth byte is ignored.
To disable the UART, send a feature set report, with the prescaler bytes as zero.
> Note: The UART is disabled by default, if read or write is detected for do to not interfere with those functions.
### USBaspHIDUART utility
The USBaspHIDUART is a simple console utility, used for testing the HID UART implementation.
This is the help page ( USBaspHIDUART.exe -h ) :
```sh
USBaspHIDUART -h
USBasp HIDUART Test App
-l List USBasp HID devices
-i Select USBasp index ( default 0 )
-b Set Baud ( default 9600 )
-c Set USBasp Crystal Hz ( default 12 MHz or 12000000 Hz )
-s Select USBasp with serial number.
4 Digits numeric only i.e. 3456, 2222, etc ).
-u Serial Number to update ( 4 Digits numeric only i.e. 3456, 2222, etc ).
Use with index -i when more than one USBasp are connected.
-r Continuous read input
-w Interactive send outputexamples
Read from USBasp at index 0 with 4800 baud
USBaspHIDUART -b 4800 -rInteractive write to USBasp at index 1 with 9600 baud
USBaspHIDUART -i 1 -wInteractive write to USBasp with serial number 1111 with 9600 baud
USBaspHIDUART -s 1111 -wRead from USBasp with 20 MHz crystal at index 1 with 19200 baud
USBaspHIDUART -i 1 -b 19200 -c 20000000 -rRead from USBasp with 20 MHz crystal and with serial number 2345 with 19200 baud
USBaspHIDUART -s 2345 -b 19200 -c 20000000 -rUpdate the first found USBasp's serial number with 3456
USBaspHIDUART -u 3456Update the USBasp's at index 3 serial number with 3456
USBaspHIDUART -i 3 -u 3456
```##### _Build from source_
Building USBaspHIDUART from source is very straightforward :
> Note: You'll need [FreePascal] 3.0.4 and higher installed.
( it's always better to build in another directory )
Windows
```
\utility\USBaspHIDUART>mkdir build
\utility\USBaspHIDUART>cd build
\utility\USBaspHIDUART\build>fpc.exe -MObjFPC -FU. -Fu..\hidapi.pas ..\USBaspHIDUART.pas -o.\USBaspHIDUART.exe
```Linux \ FreeBSD
```
\utility\USBaspHIDUART>mkdir build
\utility\USBaspHIDUART>cd build
\utility\USBaspHIDUART\build>fpc.exe -MObjFPC -FU. -Fu../ -Fu../hidapi.pas -dUseCThreads ../USBaspHIDUART.pas -o./USBaspHIDUART
```[a fork by Ralph Doncaster]:
[with USBISP modules]:
[WCID]:
[MSYS2]:
[avr8-gnu-toolchain (3.6.2.17778)]:
[UART Flags]:
[mcuee]:
[avrdudes/avrdude]:
[libUSBUARTTerminal]:
[USBaspHIDUART utility]:
[FreePascal]: