Skip to content
Karl Zeilhofer edited this page Mar 14, 2018 · 2 revisions

Welcome to the IODeviceExample wiki!

Memory Layout

The STM32F205RE has 512k flash:

  • 16k for the interrupt vector table

  • 16k unused

  • 32k for emulated EEPROM

  • 64k for read only scripts . Usage is unknown.

  • 384k for firmware

and

  • 128k RAM .

/* Memory Spaces Definitions */
MEMORY
{
	ISR_VEC (rx)	: ORIGIN = 0x08000000, LENGTH = 16K     		/* must start at address 0, contains initial vector table */
		/* NOTE: if changed, please also change START_OF_PHYSICAL_FLASH in FlashDriver.c */

	/*0x00008000 - 0x0000FFFF, 32k*/
	EEPROM_SIMU (r)	: ORIGIN = 0x08008000, LENGTH = 32K				/* Needs to be as long as 2 flash pages and mapped to flash page boundaries */
	SCRIPT (r)		: ORIGIN = 0x08010000, LENGTH = 64K
	FLASH (rx)		: ORIGIN = 0x08020000, LENGTH = (512K - 128K)
	OPTION_BYTES (r): ORIGIN = 0x1FFFF800, LENGTH = 16
	RAM (xrw)		: ORIGIN = 0x20000000, LENGTH = 128K  /* also change _estack below */
}
Note: the code above is from the linker map file and is modified, so the flash base address was changed from 0x0000 0000 to 0x0800 0000.

Speed of the PiBridge

This was discussed here: https://revolution.kunbus.de/forum/viewtopic.php?f=8&t=653 The speed of the RS485 is limited to 115200 baud, since the raspberry has no DMA channel for its UART. If the speed is higher, the Core has to handle interrupts too frequently. The I/O buffer also has only 16 bytes.

Firmware Update and Bootloader

This is discussed in the forum here: https://revolution.kunbus.de/forum/viewtopic.php?f=3&t=609 Kunbus has it’s own proprietary tool, which can to a firmware update via the PiBridge, if only one module is connected to the Core and it has to be on the right side of the Core. See here https://revolution.kunbus.de/forum/viewtopic.php?f=17&t=271 for details.

Volker said, they use the default STM32 bootloader, but it is unclear, how the manage to communicate via the halfduplex RS485.

Sniff1a and BOOT0

Sniff1a has by default a pullup installed, which enables an NMOS, which in turn pulls the BOOT0 pin low. So by default the user program is started. If Sniff1a is pulled low on power up (or reset), the STM32 bootloader is started.