Stm32flash

From Chalmers Robotförening
Revision as of 16:11, 12 April 2015 by Sterna (talk | contribs)
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Detta är ett enkelt program för att ladda över sitt program från datorn till en STM32-processor med uart via den interna bootloadern. Den variant som används till IntroARM är en fork som även kan styra flow-controlpinnar, vilket innebär att man endast behöver dra ut reset och boot, samt en uart. Detta har testats både under Linux (Arch, Debian, Ubuntu) och OS X (10.9, 10.10), dock ej ännu under Windows (2014-01-11). Koden hittar ni på Devilholks git i dagsläget. Ta ner den och kör make från en terminal. Orginalkoden hittar ni på http://stm32flash.googlecode.com/.

Användning

Hämtning och byggning

Först behöver du hämta programmet. Detta görs från | Devilholks git, antingen genom att gå dit manuellt och ladda ner eller köra kommandot "git clone http://github.com/devilholk/stm32flash". Därefter bygger och installerar du programmet genom att köra "make" och sedan "sudo make install". Du behöver GCC för att kunna bygga det.

Användning

STM32Flash är terminalbaserat. Detta innebär att du förslagsvis ställer dig där din .bin- eller .hex-fil kommer ut (stm32flash kan ta båda) och kör kommandot därifrån. Genom detta behöver du bara skriva namnet på filen, och inte hela sökvägen. Ett bra tips är att skriva stm32flash -h för help. Detta visar alla kommandon som finns. Hjälpen finns utskriven under Hjälp. Programmet har massa funktioner, men det är endast ett fåtal som är nödvändiga för att kunna programmera:

  • -b - baudrate. Hur snabbt du ska prata med microcontrollern. Använd standard baudrates för uart som programmerarkretsen klarar av. Microcontrollern anpassar sig till baudraten automagiskt. Exempelvis -b115200
  • -w - Write file. Tar in ett filnamn (.bin eller .hex) och skriver filen till microcontrollern.
  • -l - Show lines. Visar vilka pinnar som finns tillgängliga för att styr reset och boot.
  • -R - Reset signal. Speciar vilken signal som ska användas som Reset. För tillfället finns det bara stöd för RTS, DTR och alla GPIOs på en Raspberry Pi. Om man sätter ett binderstreck framför pinnen inverterar man den (aktiv hög i fallet med Reset)
  • -B - Boot signal. Speciar vilken signal som ska användas som Boot. För tillfället finns det bara stöd för RTS, DTR och alla GPIOs på en Raspberry Pi. Om man sätter ett binderstreck framför pinnen så inverterar man den (aktiv låg i fallet med Boot för uart) TODO: kolla att detta stämmer.
  • Device (har ingen flagga) - Specar vilken enhet som ska användas för programmering. Detta är typiskt en USB-art-brygga. Notera att Device bör vara den sista parametern, beroende på att getopt fungerar olika på olika system (och någon vägrade inför en flagga för den).
    • På Linux heter dom typiskt /dev/ttyUSB0 (om det är första USB-enheten som kopplas in för tillfället). Du kan kontrollera vilka enheter som finns tillgängliga med ls /dev/ttyUSB*
    • På OS X har dom riktiga namn som dom presenteras som. Typiskt är /dev/tty.SLAB_USBtoUART om det är en CP210x. Dessa kan kontrolleras genom att köra kommandot ls /dev/tty.*.
    • På Windows heter de COMx, där x är en siffra. Windows kommer ihåg alla sina serieportar och bara räknar upp varje unik den pratar med.

En komplett programmeringssträng kan se ut som följer:

stm32flash -b115200 -wIntroARM.bin -Rcs.rts -Bcs.dtr /dev/tty.SLAB_USBtoUART

Här används 115200 i baud, filen IntroARM.bin laddas in, RTS används som Reset och DTR används som Boot. Dessutom används en CP2102. Tips är att alltid använda RTS som Reset, eftersom de börjar på samma bokstav.

För att endast testa funktion kan du ange endast en device som argument. Då ska du få tillbaka lite information om microcontrollern som ser ut ungefär såhär:

Version      : 0x22
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0420 (Medium-density VL)
RAM          : 8KiB  (512b reserved by bootloader)
Flash        : 128KiB (sector size: 4x1024)
Option RAM   : 15b
System RAM   : 2KiB

Hjälp

Denna hjälp skrivs ut när man ger stm32flash flaggan -h.

Usage: stm32flash [-bvngfhc] [-[rw] filename] [-RB [-]DTR|RTS] /dev/ttyS0
	-b rate		Baud rate (default 115200)
	-r filename	Read flash to file
	-w filename	Write flash to file
	-u		Disable the flash write-protection
	-e n		Only erase n pages before writing the flash
	-v		Verify writes
	-n count	Retry failed writes up to count times (default 10)
	-g address	Start execution at specified address (0 = flash start)
	-s start_page	Flash at specified page (0 = flash start)
	-f		Force binary parser
	-h		Show this help
	-l		Show a list of available IO pins
	-c		Resume the connection (don't send initial INIT)
			*Baud rate must be kept the same as the first init*
			This is useful if the reset fails
	-R signal	Reset device after upload using IO.
			NONE can be given if one does not wish to reset at all
			List availble IO with -l
	-B signal	Use signal to select boot mode using IO.
			Logic low is applied for system boot (upload) and logic high
			for normal boot
			List availble IO with -l

Examples:
	Get device information:
		stm32flash /dev/ttyS0

	Write with verify and then start execution:
		stm32flash -w filename -v -g 0x0 /dev/ttyS0

	Read flash to file:
		stm32flash -r filename /dev/ttyS0

	Start execution:
		stm32flash -g 0x0 /dev/ttyS0

	Use IO for boot selector, write flash and then reset
	Using 1MBAUD (suitable for 24 MHz devices) on first USB serial
		stm32flash -w filename -B cs.dtr -R cs.rts -b 1000000 /dev/ttyUSB0