Specifications

Cortex-M3 / Cortex-M3 with ETM (AT420/AT425)
Date of Issue: 12-Nov-2008 ARM Errata Notice Document Revision 2.0
PR326-PRDC-009450 v2.0
© Copyright ARM Limited 2008. All rights reserved. Page 18 of 20
Non Confidential
463769: Unaligned MPU fault during a write may cause the wrong data to be written
to a successful first access
Status
Affects: product Cortex-M3, Cortex-M3 with ETM.
Fault status: Cat 3, Present in: r0p0,r1p0,r1p1,r1p1-00rel0,r1p1-01rel0, Fixed in r2p0-00rel0.
Description
When an unaligned store is executed by Cortex-M3 the transaction is split up into either two or three aligned
transactions forming constituent parts of the larger transaction. The MPU will check that these transactions are
permitted and will block them if necessary. If an unaligned transaction occurs where it overlaps two MPU
regions then each region relating to the part of the transaction that hits that region will be checked.
If an unaligned store occurs that crosses an MPU region boundary and has an MPU permission fault for the
second region check but not for the first region then it is possible for the second component’s data to be written
for the first successful transaction in place of the first transaction’s data. This can occur for writes to either the
D-Code or system bus but will only occur if one or more wait-states are applied for the first component of the
store.
Conditions
1. The full MPU is present and enabled with at least one region programmed and enabled.
2. An unaligned store is executed by the processor. The store can be to either the D-Code or the System
bus.
3. The store crosses an MPU region boundary.
4. The first region lookup passes, the second region lookup fails.
5. One or more wait states are applied via HREADYS or HREADYD.
Implications
The wrong data will be stored to a permitted address. However, a MemManage fault will occur immediately
pointing to the instruction that caused the fault. This may lead to the instruction being re-executed and the store
occurring successfully if it is for non-device memory. This would mean that the previously stored data would be
overwritten and the wrong value would never be seen. This may not be true for a shared memory system.
Workaround
A workaround is only required if the MPU is present and enabled. Either:
1. do not allow accesses to span more than one region or
2. do not allow unaligned accesses at all or
3. program the MPU correctly if applicable