STM32L1xx MCU Platform
The ST32L15x microcontroller is a Cortex M3-based MCU from STMicroelectronics that offers much lower power sleep modes than does the normal STM32F10x series MCU. Additionally, it has the following features that make it appealing to usage with OpenTag for low-power applications:
Retains SRAM during most low power modes, including a ~4.4µA mode
RTC wakeup from deep sleep modes
Supports clocking TIM9 from an external 32768Hz crystal, which is ideal for OpenTag
when running from Flash
, so clock can be kept relatively low.
Up to 32 MHz
clock speed, so complex jobs like DSP or cryptography are possible.
Up to 384KB on-chip Flash, so large data logs are possible
These attributes make the STM32L one of the best MCU platforms for battery-powered, feature-rich applications (as of writing, 03/2012).
The OpenTag kernel timer (GPTIM) is supplied by TIM9. TIM9/10/11 can be driven from the 32768Hz crystal. Using a prescaler of 32, TIM9 can provide the 1024Hz tick rate required by OpenTag/DASH7.
STM32L timers can behave identically to MSP430's “up” mode by setting both compare and auto-reload registers to the value at which an interrupt will be generated by this timer.
This “up” counting mode is used when
platform_ot_run() needs to be called at the timer interrupt interval.
This mode is also entered when calling
platform_ot_preempt(), which asynchronously calls
Alternately, the MSP430's “continuous” mode is achieved on the STM32L by setting the auto-reload register to
0xffff, and disabling the interrupt from this timer. This method is by
platform_ot_pause(), for example, which pauses the kernel indefinitely until
platform_ot_preempt() is called.
Veelite (Filesystem) Implementation
The STM32L151 and L152 microcontrollers include 4096 bytes of data EEPROM, which can be erased or rewritten one word at a time (unlike flash, which can usually only be erased or rewritten one block at a time). This has implications to the implementation of the Veelite Core.
Location in the memory space is
0x0808 0000 to
Endurance specification is 300,000 erase-write cycles.
Data size (4KB) is sufficient for mounting a basic OpenTag filesystem, therefore removing the requirement for flash wear leveling in applications that use 4KB data or less.
If the application requires more than 4KB of filesystem data, the data EEPROM may be used to store the flash wear leveling mapping table. In this scenario, the system is very robust because spontaneous power-off will not wipe the mapping table as it would in systems where the table is stored in SRAM. In those platforms (e.g. CC430
), power-down saving routines are necessary, but on the STM32L, the power only needs to be maintained during the Flash erase/write operations themselves. Normal capacitors are typically capable of doing so.
STM32L has several serial ports, including: Full speed USB device, I2C, SPI, and USART. For board-to-board applications, generally I2C, SPI, or UART might be used. For board-to-client applications, the natural choices are USB or UART.
The STM32F USB virtual COM port MPipe may be ported to STM32L without a great deal of effort, but at the time of writing (03/2012) this port has not been completed.
For UART MPipe, USART1, 2, or 3 may be used, however USART3 may be the most convenient target due to the prexisting NDEF dumb terminal software. UARTs are inherently character-based. Multi-byte messages are not framed, unless software provides framing. The implication is missing characters or extra characters must be provisioned for, with the goal of correctly parsing following messages. By contrast, I2C includes inherent message framing with its start condition and stop condition.
MPipe's NDEF Short Record format is used in the following configuration:
is set to 5, meaning “unknown”.
TYPE LENGTH is always zero (when
TNF = 5).
For further clarification, see NDEF specification at Section 3.2.4
Main item needs resolving: Should added sequence/CRC bytes at end of message add to
PAYLOAD LENGTH value?
Boards That Use STM32L1xx
| Board || Name/Link || STM32 Variant || Radio || Features
| DK7A433 || Semtech SX1212 DASH7 dev kit || STM32L151CBT6 || SX1212 || 16KB SRAM, 128KB Flash, integrated USB, 2 LED, integrated antenna
| SX1231 Proto-H152 || SX1231 + Olimex H152 Protoboard || STM32L152VBT6 || SX1231 || 16KB SRAM, 128KB Flash, integrated USB