UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 66147

2014.x FreeRTOS will not boot at low temperature

Description

This issue occurs with the 2014.x version of FreeRTOS and manifests as processor lockup on ~30% of the devices when running at low temp.

The issue is related to FreeRTOS not initializing the SPSR which is a register not affected by reset, so its un-initialized state varies based on conditions.

The SPSRs are UNKNOWN on reset. Per the ARMv7 Architecture Reference Manual, DDI 0406C.c ID05414, Pg. B1-1148. SPSR settles to non-zero at cold and zero at warm temperatures.

The assembly instruction fails under the following conditions:

- Returning from a FreeRTOS function hangs the system.

  • Function hand-written in Assembly by FreeRTOS
  • The CPU is put in elevated (IRQ) mode during function

-  The CPU incorrectly set to Big Endian mode.

  • Only at cold temperatures (between 0-12C)

Solution

Newer versions of FreeRTOS address the issue.

FreeRTOS v7.0.2 did not initialize SPSR before read-modify-write. There is no official FreeRTOS port for the Cortex-A9 in FreeRTOS V7.0.2. The first official port appeared in V8.0.0.

The first Xilinx Supported and tested FreeRTOS port is version 8.2.1.

Note: Xilinx software uses CPSR instead of SPSR so the issue is not seen for those cases.


Xilinx Recommendation:

If using FreeRTOS versions prior to v8.1.2, search all code for any SPSR commands and Modify/Initialize the SPSR bits.

AR# 66147
Date Created 12/07/2015
Last Updated 01/06/2016
Status Active
Type Known Issues
Devices
  • Zynq-7000
Tools
  • Vivado Design Suite - 2014.1
  • Vivado Design Suite - 2014.2
  • Vivado Design Suite - 2014.3
  • More
  • Vivado Design Suite - 2014.4
  • Vivado Design Suite - 2014.4.1
  • Less