STM32H742xI/G, STM32H743xI/G STM32H750xB, STM32H753xI
STM32H742xI/G, STM32H743xI/G STM32H750xB, STM32H753xI
STM32H750xB, STM32H753xI
Errata sheet
Applicability
This document applies to the part numbers of STM32H742xI/G, STM32H743xI/G, STM32H750xB, STM32H753xI devices and
the device variants as stated in this page.
It gives a summary and a description of the device errata, with respect to the device datasheet and reference manual RM0433.
Deviation of the real device behavior from the intended device behavior is considered to be a device limitation. Deviation of the
description in the reference manual or the datasheet from the intended device behavior is considered to be a documentation
erratum. The term “errata” applies both to limitations and documentation errata.
Y, W 0x1003
STM32H742xI/G, STM32H743xI/G,
X 0x2001
STM32H750xB, STM32H753xI
V 0x2003
1. Refer to the device datasheet for how to identify this code on different types of package.
2. REV_ID[15:0] bitfield of DBGMCU_IDC register.
The following table gives a quick reference to the STM32H742xI/G, STM32H743xI/G, STM32H750xB,
STM32H753xI device limitations and their status:
A = limitation present, workaround available
N = limitation present, no workaround available
P = limitation present, partial workaround available
“-” = limitation absent
Applicability of a workaround may depend on specific conditions of target application. Adoption of a workaround
may cause restrictions to target application. Workaround for a limitation is deemed partial if it only reduces the
rate of occurrence and/or consequences of the limitation, or if it is fully effective for only a subset of instances on
the device or in only a subset of operating modes, of the function concerned.
Status
Function Section Limitation Rev. Rev. Rev.
Y, W X V
2.2.13 Unexpected leakage current on I/Os when VIN higher that VDD A - -
Status
Function Section Limitation Rev. Rev. Rev.
Y, W X V
System A tamper event does not erase the backup RAM when the backup
2.2.23 A A A
RAM clock is disabled
2.2.24 LSE CSS detection occurs even when the LSE CSS is disabled P P P
2.2.25 Output current sunk or sourced by Pxy_C pins D D D
Ethernet MII mode is not available on packages with PC2_C/PC3_C
2.2.26 A A A
pins
2.2.27 HASH input data may be corrupted when DMA is used A A A
2.2.28 LSE crystal oscillator may be disturbed by transitions on PC13 N N N
Inaccurate LSE frequency in oscillator bypass mode in combination
2.2.29 A A A
with VBAT mode
MDMA 2.3.1 Non-flagged MDMA write attempts to reserved area A A A
BDMA disable failure and error flag omission upon simultaneous
BDMA 2.4.1 A A A
transfer error and global flag clear
2.5.1 SOFx not asserted when writing into DMAMUX_CFR register N N N
OFx not asserted for trigger event coinciding with last DMAMUX
2.5.2 N N N
request
DMAMUX
2.5.3 OFx not asserted when writing into DMAMUX_RGCFR register N N N
Wrong input DMA request routed upon specific DMAMUX_CxCR
2.5.4 A A A
register write coinciding with synchronization event
DMA2D 2.6.1 DMA2D swap byte feature is not available N - -
2.7.1 Dummy read cycles inserted when reading synchronous memories N N N
2.7.2 Wrong data read from a busy NAND memory A A A
FMC
2.7.3 Spurious clock stoppage with continuous clock feature enabled A - -
2.7.4 Unsupported read access with unaligned address P P P
2.8.1 First nibble of data not written after dummy phase A - -
QUADSPI cannot be used in indirect read mode when only data
2.8.2 P P P
phase is activated
2.8.3 QUADSPI hangs when QUADSPI_CCR is cleared P P P
QUADSPI
2.8.4 QUADSPI internal timing criticality A A A
2.8.5 Memory-mapped read of last memory byte fails P P P
QUADSPI memory failure when using HCLK quadspi_ker_ck clock as
2.8.6 A A A
QUADSPI CLK
Busy signal not detected at resume point when suspend command
2.9.1 A - -
accepted by the card during busy phase
SDMMC
2.9.2 Clock stop reported during read wait sequence A - -
Status
Function Section Limitation Rev. Rev. Rev.
Y, W X V
Status
Function Section Limitation Rev. Rev. Rev.
Y, W X V
2.18.3 Calendar initialization may fail in case of consecutive INIT mode entry A A A
RTC 2.18.4 Alarm flag may be repeatedly set when the core is stopped in debug N N N
A tamper event fails to trigger timestamp or timestamp overflow
2.18.5 N N N
events during a few cycles after clearing TSF
10-bit master mode: new transfer cannot be launched if first part of
2.19.1 A - -
the address is not acknowledged by the slave
Wrong data sampling when data setup time (tSU;DAT) is shorter than
2.19.3 P P P
one I2C kernel clock period
2.19.4 Spurious bus error detection in master mode A A A
I2C 2.19.5 Last-received byte loss in reload mode P - -
2.19.6 Spurious master transfer upon own slave address match P P P
2.19.8 OVR flag not set in underrun condition N N N
2.19.9 Transmission stalled after first byte transfer A A A
2.19.10 SDA held low upon SMBus timeout expiry in slave mode A A A
2.20.1 UDR flag set while the SPI slave transmitter is disabled A - -
2.20.2 Anticipated end-of-transmission signaling in SPI slave mode A A A
2.20.3 Data corruption due to noisy receive line A A A
USART
2.20.4 DMA stream locked when transferring data to/from USART - A A
2.20.5 Received data may be corrupted upon clearing the ABREN bit A A A
2.20.6 Noise error flag set while ONEBIT is set N N N
2.21.1 DMA stream locked when transferring data to/from LPUART - A A
LPUART
2.21.2 Possible LPUART transmitter issue when using low BRR[15:0] value P P P
2.22.1 Spurious DMA Rx transaction after simplex Tx traffic A - -
2.22.2 Master data transfer stall at system clock much faster than SCK A A A
2.22.3 Corrupted CRC return at non-zero UDRDET setting P P P
SPI 2.22.4 TXP interrupt occurring while SPI disabled A A A
Possible corruption of last-received data depending on CRCSIZE
2.22.5 A A A
setting
2.22.6 Truncation of SPI output signals after EOT event A A A
Last SAI_SCK clock pulse truncated upon disabling SAI master with
2.23.1 P - -
SAI NODIV set and MCKDIV greater than one
2.23.2 Last SAI_MCLK clock pulse truncated upon disabling SAI master A - -
2.24.1 Writing FDCAN_TTTS during initialization corrupts FDCAN_TTTMC A - -
Wrong data may be read from message RAM by the CPU when using
2.24.2 N - -
two FDCANs
FDCAN 2.24.3 Desynchronization under specific condition with edge filtering enabled A A A
Tx FIFO messages inverted under specific buffer usage and priority
2.24.4 A A A
setting
2.24.5 DAR mode transmission failure due to lost arbitration A A A
OTG_HS 2.25.1 Possible drift of USB PHY pull-up resistor P - -
Transmit data FIFO is corrupted when a write sequence to the FIFO
OTG_HS 2.25.2 A - -
is interrupted with accesses to certain OTG_HS registers
Status
Function Section Limitation Rev. Rev. Rev.
Y, W X V
OTG_HS Host packet transmission may hang when connecting the full speed
2.25.3 N N N
interface through a hub to a low-speed device
Tx DMA engine may halt when a Tx queue flush command is issued
2.26.1 A - -
in OSP mode
Rx DMA engine may not recover and restart an operation after getting
2.26.2 A - -
a bus error response
In OSP mode, Tx DMA engine may not correctly stop when instructed
2.26.3 A - -
while the Ethernet is actively transferring data
Giant packet error is incorrectly declared when a dribble error occurs
2.26.4 for the Rx packet whose length is exactly equal to the giant packet A - -
limit
Subsequent packets are not transmitted when the transmit queue is
2.26.5 A - -
flushed during packet transmission
Read-on-clear interrupt status not updated when an event occurs on
2.26.6 N - -
the same clock cycle as a status register read
Context descriptor contains incorrect receive timestamp status in
2.26.7 A - -
Threshold mode when application clock is very fast
Context descriptor is incorrectly written to descriptor memory when
2.26.8 the Rx timestamp status is dropped due to unavailability of space in A - -
Rx queue
MAC may indicate a power-down state even when disabled by
2.26.9 A - -
software
Incorrect Tx FIFO fill-level generation when MAC switches from Full-
2.26.10 A - -
ETH duplex to Half-duplex mode
The MAC does not provide bus access to a higher priority request
2.26.11 N N N
after a low priority request is serviced
Rx DMA engine may fail to recover upon a restart following a bus
2.26.12 A A A
error, with Rx timestamping enabled
Tx DMA engine fails to recover correctly or corrupts TSO/USO header
2.26.13 N N N
data on receiving a bus error response from the AHB DMA slave
Incorrectly weighted round robin arbitration between Tx and Rx DMA
2.26.14 A A A
channels to access the common host bus
2.26.15 Incorrect L4 inverse filtering results for corrupted packets N N N
IEEE 1588 Timestamp interrupt status bits are incorrectly cleared on
2.26.16 - A A
write access to the CSR register with similar offset address
Bus error along with Start-of-Packet can corrupt the ongoing
2.26.17 N N N
transmission of MAC generated packets
2.26.18 Spurious receive watchdog timeout interrupt A A A
2.26.19 Incorrect flexible PPS output interval under specific conditions A A A
Packets dropped in RMII 10 Mbps mode due to fake dribble and CRC
2.26.20 A A A
error
2.26.21 ARP offload function not effective A A A
2.26.22 Tx DMA may halt while fetching TSO header under specific conditions A A A
2.27.1 Transmission blocked when transmitted start bit is corrupted P - -
CEC 2.27.2 Missed CEC messages in normal receiving mode A A A
2.27.3 Unexpected TXERR flag during a message transmission A A A
The following sections describe the errata of the applicable devices with Arm® core and provide workarounds if
available. They are grouped by device functions.
Note: Arm is a registered trademark of Arm Limited (or its subsidiaries) in the US and/or elsewhere.
Description
This limitation is registered under Arm® ID number 1259864 and classified into “Category A”.
If a particular sequence of stores and loads is performed to write-through memory, and some timing-based
internal conditions are met, then a load might not get the last data stored to that address.
This erratum can only occur if the loads and stores are to write-through memory. This could be due to any of the
following:
• The MPU has been programmed to set this address as write-through.
• The default memory map is used and this address is write-through in that map.
• The memory is cacheable, and the FORCEWT bit of the CM7_CACR register is set.
• The memory is cacheable, shared, and the SIWT bit of the CM7_CACR register is set.
The following sequence is required for this erratum to occur:
1. The address of interest must be in the cache.
2. A write-through store to the same doubleword as the address of interest.
3. One of the following:
– A line-fill is started (to a different cache line to the address of interest) that allocates to the same set as
the address of interest.
– An ECC error.
– A cache maintenance operation without a following DSB.
4. A store to the address of interest.
5. A load from the address of interest.
If certain specific timing conditions are met, the load gets the data from the first store, or from what was in the
cache at the start of the sequence instead of the data from the second store.
The effect of this erratum is that load operations can return incorrect data.
Workaround
There is no direct workaround for this erratum.
Where possible, Arm® recommends that you use the MPU to change the attributes on any write-through memory
to write-back memory. If this is not possible, it might be necessary to disable the cache for sections of code that
access write-through memory.
2.1.2 PLD might perform linefill to address that would generate a MemManage Fault
Description
If the MPU is present and enabled, then it can be programmed so that loads to certain addresses generate a
MemManage Fault. This could be because:
• The address is unmapped, that is, it is not in an enabled region and the default memory map is not being
used.
• The address cannot be accessed at the current privilege level.
• The address cannot be accessed at any privilege level.
Because of this erratum, a PLD to such an address might incorrectly cause a data cache line-fill.
Conditions:
• The data cache is enabled and the MPU is enabled.
• A PLD is executed, and either:
– The PLD is to an address not mapped in the MPU, which requires that:
◦ The MPU is enabled.
◦ The default memory map is not being used.
◦ The default memory map is cacheable at that address.
◦ The PLD does not hit an enabled MPU region.
– The PLD is to a region that has permission requirements that the PLD does not meet, which requires
that:
◦ The MPU is enabled.
◦ The default memory map is not being used.
◦ The region that the PLD hits is cacheable.
◦ The region that the PLD hits would generate a MemManage fault for a load. This requires
either:
• The region cannot be accessed by a read at any privilege level.
• The region only has read access for privileged code and the PLD is unprivileged.
Note that in rare cases, a PLD instruction can be speculatively executed in the shadow of a mispredicted branch.
This can even theoretically be a literal value that decodes to a PLD.
Processor execution is not affected by this erratum. The data returned from the line-fill is not directly consumed by
the PLD. Any subsequent load to that address can only access the data if it has permission to do so. This erratum
does not permit software to access data that it does not have permissions for.
The only implications of this erratum are the access itself that should not have been performed. This might have
an impact on memory regions with side-effects on reads or on memory, which never returns a response on the
bus.
Workaround
Accesses to memory that is not mapped in the MPU can be avoided by using MPU region 0 to cover all
unmapped memory and make this region execute-never and inaccessible. That is, MPU_RASR0 must be
programmed with:
• The ENABLE bit of the MPU_RASR0 register = 0b1; MPU region 0 enable
• The SIZE bit of the MPU_RASR0 register = 0b11111; MPU region 0 size = 2^32 bytes to cover entire
memory
• The SRD bit of the MPU_RASR0 register = 0b0000 0000; All sub-regions enabled
• The XN bit of the MPU_RASR0 register = 0b1; Execute-never to prevent instruction fetch
• The AP bit of the MPU_RASR0 register = 0b000; No read or write access for any privilege level
• The TEX bit of the MPU_RASR0 register = 0b000; Attributes = Strongly-ordered
• The C bit of the MPU_RASR0 register = 0b0; Attributes = Strongly-ordered
• The B bit of the MPU_RASR0 register = 0b0; Attributes = Strongly-ordered
Accesses to memory that is mapped in the MPU, but should not be accessed at the current privilege level can be
avoided by making the region noncacheable. That is, MPU_RASR0 should be programmed with:
• The TEX bit of the MPU_RASR0 register = 0b000; Attributes = Strongly-ordered
• The C bit of the MPU_RASR0 register = 0b0; Attributes = Strongly-ordered
• The B bit of the MPU_RASR0 = 0b0; Attributes = Strongly-ordered
2.1.3 Software programming errors might not be reported for online MBIST access to the ICACHE
Description
The online MBIST interface provides access to the cache and TCM RAMs to allow in-field memory testing during
normal operation of the processor. Because of this erratum, errors in the software that works with the memory
testing might not be indicated on the MBISTERR output signal as intended for ICACHE tests.
Note that this erratum does not affect the detection of faults in the memories under test, but affects only the
feature that helps to indicate errors in software used during testing.
There are two online MBIST use cases: software transparent and software assisted.
In the software transparent use case, software running on the processor is not involved in or aware of the memory
testing being carried out. See the Cortex®‑M7 safety manual for more details. In this case, the target memory is
automatically locked by the MBIST controller, which causes the processor pipeline to stall if it attempts to access
this memory. Testing is carried out using short bursts of accesses, which last for less than 20 clock cycles and do
not corrupt the memory contents. For this reason, the memory is locked only for a very short period of time and
the gap between bursts is very large.
In the software-assisted use case, the target memory is still locked by the MBIST controller, but the software
running on the processor disables the target memory before testing commences. This prevents any software
access to this memory during testing. See the Cortex®‑M7 safety manual for more details. For this reason,
software accesses go to another memory instead of the target memory and the pipeline does not stall. This is
important because the software-assisted use case is intended to be used for production MBIST algorithms, which
take a long time to run. For example, if the ICACHE were disabled then software might still execute using the
main memory or the TCMs.
This erratum only affects the software-assisted use case, when the ICACHE RAMs are tested. An error indication
is sent back to the MBIST controller if software attempts to access the target memory while it is locked for testing.
Because of this erratum, an error is not indicated back to the MBIST controller on the MBISTERR[0] output signal
when software performs a lookup to the ICACHE during MBIST testing.
The error indication is correctly asserted for all the other types of ICACHE access during MBIST testing:
• A cache line invalidates because of an ECC error.
• A cache invalidates by MVA.
• A cache invalidates all operation.
• A cache line-fill allocation.
Note that this erratum only affects the MBIST software-assisted use case error indication for the ICACHE and the
MBISTERR[0] signal functions correctly for the DCACHE, ITCM, and DTCM.
The following conditions are required to cause this erratum:
• The software intends to use the software assisted online MBIST use case.
• The ICACHE is not disabled by software running on the Cortex®‑M7 before testing commences.
• The MBIST controller selects an ICACHE memory array for testing, locks the target memory, and testing
commences.
This erratum could result in an error not being indicated back to the MBIST controller on the MBISTERR[0] output
signal when software assisted use case is used and the ICACHE is not disabled by software before testing
commences. This could result in the processor unexpectedly stalling for a long period of time during MBIST
testing of the ICACHE memories, without there being a clear indication of the cause of the stall. For this reason,
the processor might not make progress as expected, because of the software error, during ICACHE testing.
Workaround
There is no workaround for this erratum.
2.1.4 ECC error causes data corruption when the data cache error bank registers are locked
Description
The data cache contains two error bank registers, DEBR0 and DEBR1. These registers store the locations in the
cache that error correcting code (ECC) errors affect and prevent future allocations to those locations.
Software can lock each DEBR, and this prevents the DEBR from being automatically updated when a data cache
ECC error is detected.
Because of this erratum, if both DEBR0 and DEBR1 are locked and an ECC error is detected on a cacheable
store, then the store data is written onto the bus, but not written into the data cache. This might result in the data
cache containing stale data.
Conditions:
• DEBR0 and DEBR1 are locked.
• The wanted address has been allocated to the cache.
• A cacheable store to the wanted address looks up in the cache, and an ECC error is found in the cache set
that the store addresses.
This erratum can cause data corruption in the data cache.
Workaround
Software must avoid locking both error bank registers.
2.1.5 Store after cache invalidate without intervening barrier might cause inconsistent memory view
Description
If a cache invalidate operation is followed by a write-through store to an address affected by that operation and a
line-fill to that address occurs, then the line-fill might allocate to the cache without the data from the store.
Subsequently, that store writes to the bus and leaves the cache with stale data.
The following sequence is required for this erratum to occur:
1. The address of interest is in the cache.
2. One of the following data cache maintenance operations that affects the same cache line as the wanted
address is performed.
– DCCIMVAC.
– DCCISW.
– DCIMVAC.
– DCISW.
3. A write-through store is performed to the wanted address
4. A line-fill to the same cache line of the wanted address occurs for any reason.
There must be no DSB or DMB between the maintenance operation and the store.
If this sequence occurs and certain very specific internal timing conditions are met, then the store data is not
merged into the line-fill, but it writes out to the bus. After this has occurred, the line-fill buffer or cache contains
stale data.
A subsequent load to the same address of the store might observe stale data in the cache.
Workaround
A DMB must be inserted between the cache maintenance operation and the store.
It is expected that all code should already have this DMB or DSB because there is no implicit ordering between
cache maintenance operations and stores.
Description
Note: This limitation is due to an error of implementation of the Arm core on the die, as opposed to a limitation of the
core itself.
Workaround
None.
2.2 System
Description
The system break sources (processor LOCKUP output, PVD detection, RAMECC error, flash memory ECC error,
and clock security system detection), do not generate a break event on TIM1, TIM8, and HRTIM.
Workaround
None.
2.2.2 Clock recovery system synchronization with USB SOF does not work
Description
The clock recovery system (CRS) synchronization by USB start-of-frame signal (SOF) does not work.
Workaround
When available, use the LSE oscillator as synchronization source.
Description
The SysTick external clock is the system clock, instead of the system clock divided by 8 (HCLK/8).
Workaround
Use the system clock (HCLK) as external clock, and multiply the reload value by 8 in the STK_LOAD register.
Make sure that the maximum value is 224 - 1.
2.2.4 Option byte loading can be done with the user wait-state configuration
Description
After an option byte change, the option byte loading is performed with the user wait-state configuration instead of
the default configuration.
Workaround
When performing an option byte loading to modify the option bytes, configure the correct number of wait states, or
use the default value (seven wait states).
2.2.5 Flash memory BusFault address register may not be valid when an ECC double error occurs
Description
When a first read operation is performed without ECC error, and a controller device accesses data with wait
states, if a new access is done and contains an ECC double detection error, then the error message returns the
address of the first data that has not generated the error.
Workaround
When a double ECC error flag is raised, check the failing address in the flash memory interface
(FAIL_ECC_ADDR1/2 of the FLASH_ECC_FA1R/FA2R), and disregard the content of the BusFault address
register.
Description
When two consecutive ECC errors occur, the content of the FLASH_ECC_FA1/2 register may not be updated if
the error correction flag (SNECCERR1/2 or DBECCERR1/2 in FLASH_SR1/2 register) is cleared at the same
time as a new ECC error occurs
Workaround
None.
Description
In case of readout protection level regression from level 1 to level 0, the PCROP protected areas in flash memory
may become unprotected.
Workaround
The user application must set the readout protection level to level 2 to avoid PCROP-protected areas from being
unprotected.
2.2.8 Flash memory bank swapping may impact embedded flash memory interface behavior
Description
When the flash memory bank swapping feature is enabled, the embedded flash memory interface behavior may
become unpredictable.
Workaround
Do not enable the flash memory bank swapping feature.
2.2.9 Reading from AXI SRAM may lead to data read corruption
Description
The read data may be corrupted when the following conditions are met:
• Several read transactions are performed to the AXI SRAM, and
• A controller device delays its data acceptance while a new transfer is requested.
Workaround
Set the READ_ISS_OVERRIDE bit in the AXI_TARG7_FN_MOD register. This reduces the read issuing capability
to 1 at AXI interconnect level and avoids data corruption.
2.2.10 Clock switching does not work when an LSE failure is detected by CSS
Description
When a failure on the LSE oscillator is detected by the clock security system (CSS), the backup domain clock
source cannot be changed.
Workaround
When the clock security system detects an LSE failure, reset the backup domain, and select a functional clock
source.
2.2.11 RTC stopped when a system reset occurs while the LSI is used as clock source
Description
When the LSI clock is used as RTC clock source, the RTC is stopped (it does not receive the clock anymore)
when a system reset occurs.
Workaround
Apply one of the following measures:
• Check the RTC clock source after each system reset.
• If the LSI clock is selected, enable it again.
Description
To avoid damaging parts, the user application must avoid to load more than 5 mA on OTG_FS_DP/DM pins.
Workaround
None.
2.2.13 Unexpected leakage current on I/Os when VIN higher that VDD
Description
When VIN is higher than VDD, and depending on the waveform applied to I/Os, an unexpected leakage current
may be observed when VIN decreases.
This leakage does not impact the product reliability.
Workaround
The application must maintain VIN lower that VDD to avoid current leakage on I/Os.
Description
The LSEDRV[1:0] bits of the RCC_BDCR register, which are used to select the LSE oscillator driving capability,
are swapped (see Table 5).
Workaround
• Use LSEDRV[1:0] = 01 to select the LSE medium-high drive.
• Use LSEDRV[1:0] = 10 to select the LSE medium-low drive.
Description
The HRTIM synchronization input source from an internal event (SYNCIN[1:0] = 10 of the HRTIM_MCR register)
does not work. As a result, it is not possible to use the on-chip TIM1_TRGO output as synchronization event for
HRTIM.
Workaround
None.
2.2.16 Device stalled when two consecutive level regressions occur without accessing from/to
backup SRAM
Description
The device may be stalled when two consecutive level regressions (switching from RDP level 1 to RDP level 0)
are performed without accessing (reading/writing) from/to the backup SRAM.
A power-on reset is required to recover from this failure.
Workaround
Perform a dummy access to backup SRAM before executing the level regression sequence (switching from RDP
level 1 to RDP level 0).
Description
The CRC result may be corrupted when the flash memory CRC end-address register for bank 1 or 2
(FLASH_CRCEADD1/2R) targets the last address of sector 7.
Workaround
Do not use the flash memory CRC calculation feature.
2.2.18 GPIO assigned to DAC cannot be used in output mode when the DAC output is connected to
on-chip peripheral
Description
When a DAC output is connected only to an on-chip peripheral, the corresponding GPIO is expected to be
available as an output for any other functions.
However, when the DAC output is configured for on-chip peripheral connection only, the GPIO output buffer
remains disabled and cannot be used in output mode (GPIO or alternate function). It can still be used in input or
analog mode.
Workaround
None.
Description
The LSI clock can become unstable (duty cycle different from 50 %) and its maximum frequency can become
significantly higher than 32 kHz, when:
• LSI clocks the RTC, or it clocks the clock security system (CSS) on LSE (which holds when the
LSECSSON bit set), and
• the VDD power domain is reset while the backup domain is not reset, which happens:
– upon exiting Shutdown mode
– if VBAT is separate from VDD and VDD goes off then on
– if VBAT is tied to VDD (internally in the package for products not featuring the VBAT pin, or externally)
and a short (< 1 ms) VDD drop under VDD(min) occurs
Workaround
Apply one of the following measures:
• Clock the RTC with LSE or HSE/32, without using the CSS on LSE
• If LSI clocks the RTC or when the LSECSSON bit is set, reset the backup domain upon each VDD power
up (when the BORRSTF flag is set). If VBAT is separate from VDD, also restore the RTC configuration,
backup registers and anti-tampering configuration.
Description
VOS0 voltage scaling level is not available on silicon revision Y and W devices. This limits the maximum CPU
frequency to 400 MHz.
Workaround
Use silicon revision V or X devices to reach a maximum frequency of 480 MHz.
Description
The VDDLDO pin is not available on the TFBGA100 package. The F4 ball is internally connected to VDD.
Workaround
None.
2.2.22 WWDG not functional when VDD is lower than 2.7 V and VOS0 or VOS1 voltage level is selected
Description
The system window watchdog (WWDG) is not functional, that is, it does not generate a correct system reset
and/or the WWDG reset flag is not asserted, when VDD is lower than 2.7 V and VOS0 or VOS1 voltage level is
selected. There is no dependency on VDDLDO.
Workaround
None.
2.2.23 A tamper event does not erase the backup RAM when the backup RAM clock is disabled
Description
Upon a tamper event, the backup RAM is normally reset and its content erased. However, when the backup RAM
clock is disabled (BKPRAMEN bit cleared in RCC_ AHB4ENR register), the backup RAM reset fails and the
memory is not erased.
Workaround
Enable the backup RAM clock by setting BKPRAMEN bit in the RCC_AHB4 clock register (RCC_AHB4ENR).
This can be done either during device initialization or during a tamper service routine.
2.2.24 LSE CSS detection occurs even when the LSE CSS is disabled
Description
The LSECSSD flag in RCC_BDCR register can be spuriously set in case of ESD stress when the device is in
VBAT mode, even if the CSS on LSE is disabled. The LSE clock is no longer propagated to the RTC nor the
system as long as the LSECSSD flag is set. This is applicable even if the LSE oscillates. LSECSSD can be
cleared only by a Backup domain reset.
During ST functional ESD tests, the failure was observed by stressing PC13, PC14, VBAT, PE5, and PE6. No
failure is detected when both VDD and VBAT are present. The sensitivity observed on these five pins can be
quantified through IEC1000-4-2 (ESD immunity) standard, with severity estimated between 1 (low immunity) and
2 (medium immunity), according to the same standard.
Workaround
To achieve good overall EMC robustness, follow the general EMC recommendations to increase equipment
immunity (see EMC design guide for STM8, STM32 and Legacy MCUs application note (AN1709)). Robustness
can be further improved for the impacted pins other than VBAT by inserting, where possible, serial resistors with
the value as high as possible not exceeding 1 kΩ, as close as possible to the microcontroller.
Description
Some datasheets may not state that the current sunk or sourced by Pxy_C pins is limited to 1 mA when the
analog switch between Pxy and Pxy_C pads is closed.
Workaround
No application workaround is required.
2.2.26 Ethernet MII mode is not available on packages with PC2_C/PC3_C pins
Description
The Ethernet MII mode is not available on packages where only the PC2_C/PC3_C pins are available.
Workaround
Instead, use the RMII Ethernet mode.
Description
When HASH uses DMA1 to transfer data, and DMA2 is used by the application to manage other peripherals, the
HASH input data may get corrupted.
This issue also occurs when DMA2 is used for HASH data transfers, and DMA1 to manage other peripherals.
Workaround
Apply one of the following measures:
• During a HASH data transfer using DMA1, make sure that no DMA channels are enabled on DMA2 (and
vice versa).
• Use the interrupt or polling mode to transfer data to the HASH peripheral when DMA1 or DMA2 channels
cannot be disabled during the HASH transfer.
Description
On LQFP and VFQFPN packages, the LSE crystal oscillator clock frequency can be incorrect when PC13 is
toggling in input or output (for example when used for RTC_OUT1). The external clock input (LSE bypass) is not
impacted by this limitation.
The WLCSP and UFBGA packages are not impacted by this limitation.
Workaround
None.
Avoid toggling PC13 when LSE is used on LQFP and VFQFPN.
2.2.29 Inaccurate LSE frequency in oscillator bypass mode in combination with VBAT mode
Description
When LSE is used in bypass mode (RCC_BDCR. LSEBYP = 1), and if the microcontroller switches to VBAT
mode, LSE frequency is not accurate if the external clock VLSE_ext max voltage is higher than min (VBOR0,
VBAT). Refer to the datasheet for more information.
Workaround
If the application requires accurate LSE frequency in oscillator bypass mode and in combination with VBAT mode,
VLSE_ext max voltage must be lower than min (VBOR0, VBAT).
2.3 MDMA
Description
The 0x0000 0000 - 0x0003 FFFF address space is linked to ITCM. The TCM_AXI_SHARED[1:0] bitfield of the
FLASH_OPTSR2_CUR option byte defines areas of this address space valid for access and reserved areas.
MDMA write access (through the CPU AHBS) to an address in any reserved area is expected to signal bus error
exception.
However, with TCM_AXI_SHARED[1:0] bitfield set to 10, although MDMA write attempts to addresses in the
0x0003 0000 - 0x0003 FFFF reserved area are duly ignored (no data write effected), they do not signal bus error
exception (no flag is raised), which corresponds to MDMA wrongly reporting write completed.
Workaround
Avoid accessing reserved areas.
2.4 BDMA
2.4.1 BDMA disable failure and error flag omission upon simultaneous transfer error and global flag
clear
Description
Upon a data transfer error in a BDMA channel x, both the specific TEIFx and the global GIFx flags are raised and
the channel x is normally automatically disabled. However, if in the same clock cycle the software clears the GIFx
flag (by setting the CGIFx bit of the BDMA_IFCR register), the automatic channel disable fails and the TEIFx flag
is not raised.
This issue does not occur with ST's HAL software that does not use and clear the GIFx flag when the channel is
active.
Workaround
Do not clear GIFx flags when the channel is active. Instead, use HTIFx, TCIFx, and TEIFx specific event flags and
their corresponding clear bits.
2.5 DMAMUX
Description
The SOFx flag of the DMAMUX_CSR status register is not asserted if overrun from another DMAMUX channel
occurs when the software writes into the DMAMUX_CFR register.
This can happen when multiple DMA channels operate in synchronization mode, and when overrun can occur
from more than one channel. As the SOFx flag clear requires a write into the DMAMUX_CFR register (to set the
corresponding CSOFx bit), overrun occurring from another DMAMUX channel operating during that write
operation fails to raise its corresponding SOFx flag.
Workaround
None. Avoid the use of synchronization mode for concurrent DMAMUX channels, if at least two of them potentially
generate synchronization overrun.
2.5.2 OFx not asserted for trigger event coinciding with last DMAMUX request
Description
In the DMAMUX request generator, a trigger event detected in a critical instant of the last-generated DMAMUX
request being served by the DMA controller does not assert the corresponding trigger overrun flag OFx. The
critical instant is the clock cycle at the very end of the trigger overrun condition.
Additionally, upon the following trigger event, one single DMA request is issued by the DMAMUX request
generator, regardless of the programmed number of DMA requests to generate.
The failure only occurs if the number of requests to generate is set to more than two (GNBREQ[4:0] > 00001).
Workaround
Make the trigger period longer than the duration required for serving the programmed number of DMA requests,
so as to avoid the trigger overrun condition from occurring on the very last DMA data transfer.
Description
The OFx flag of the DMAMUX_RGSR status register is not asserted if an overrun from another DMAMUX request
generator channel occurs when the software writes into the DMAMUX_RGCFR register. This can happen when
multiple DMA channels operate with the DMAMUX request generator, and when an overrun can occur from more
than one request generator channel. As the OFx flag clear requires a write into the DMAMUX_RGCFR register (to
set the corresponding COFx bit), an overrun occurring in another DMAMUX channel operating with another
request generator channel during that write operation fails to raise the corresponding OFx flag.
Workaround
None. Avoid the use of request generator mode for concurrent DMAMUX channels, if at least two channels are
potentially generating a request generator overrun.
2.5.4 Wrong input DMA request routed upon specific DMAMUX_CxCR register write coinciding with
synchronization event
Description
If a write access into the DMAMUX_CxCR register having the SE bit at zero and SPOL[1:0] bitfield at a value
other than 00:
• sets the SE bit (enables synchronization),
• modifies the values of the DMAREQ_ID[5:0] and SYNC_ID[4:0] bitfields, and
• does not modify the SPOL[1:0] bitfield,
and if a synchronization event occurs on the previously selected synchronization input exactly two AHB clock
cycles before this DMAMUX_CxCR write, then the input DMA request selected by the DMAREQ_ID[5:0] value
before that write is routed.
Workaround
Ensure that the SPOL[1:0] bitfield is at 00 whenever the SE bit is 0. When enabling synchronization by setting the
SE bit, always set the SPOL[1:0] bitfield to a value other than 00 with the same write operation into the
DMAMUX_CxCR register.
Description
Some reference manual revisions may wrongly state that the DMAMUX_RGCFR register is read-write, while it is
write-only.
This is a description inaccuracy issue rather than a product limitation.
Workaround
No application workaround is required.
2.6 DMA2D
Description
The SB bit of the register DMA2D_OPFCCR register is not implemented. As a result, the swap byte feature is not
available.
Workaround
None.
2.7 FMC
Description
When performing a burst read access from a synchronous memory, two dummy read accesses are performed at
the end of the burst cycle whatever the type of burst access.
The extra data values read are not used by the FMC and there is no functional failure.
Workaround
None.
Description
When a read command is issued to the NAND memory, the R/B signal gets activated upon the de-assertion of the
chip select. If a read transaction is pending, the NAND controller might not detect the R/B signal (connected to
NWAIT) previously asserted and sample a wrong data. This problem occurs only when the MEMSET timing is
configured to 0x00 or when ATTHOLD timing is configured to 0x00 or 0x01.
Workaround
Either configure MEMSET timing to a value greater than 0x00 or ATTHOLD timing to a value greater than 0x01.
Description
With the continuous clock feature enabled, the FMC_CLK clock may spuriously stop when:
• the FMC_CLK clock is divided by 2, and
• an FMC bank set as 32-bit is accessed with a byte access.
division ratio set to 2, the FMC_CLK clock may spuriously stop upon an
Note: With static memories, a spuriously stopped clock can be restarted by issuing a synchronous transaction or any
asynchronous transaction different from a byte access on 32-bit data bus width.
Workaround
With the continuous clock feature enabled, do not set the FMC_CLK clock division ratio to 2 when accessing 32-
bit asynchronous memories with byte access.
Description
Read access with unaligned address, such as a half-word read access starting at odd address, is not supported.
Workaround
Compile the software that accesses the fmc region with a compiler option that ensures data alignment, such as –
no_unaligned_access.
2.8 QUADSPI
Description
The first nibble of data to be written to the external flash memory is lost when the following condition is met:
• QUADSPI is used in indirect write mode.
• At least one dummy cycle is used.
Workaround
Use alternate bytes instead of dummy phase to add latency between the address phase and the data phase. This
works only if the number of dummy cycles to substitute corresponds to a multiple of eight bits of data.
Example:
• To substitute one dummy cycle, send one alternate byte (only possible in DDR mode with four data lines).
• To substitute two dummy cycles, send one alternate byte in SDR mode with four data lines.
• To substitute four dummy cycles, send two alternate bytes in SDR mode with four data lines, or one
alternate byte in SDR mode with two data lines.
• To substitute eight dummy cycles, send one alternate byte in SDR mode with one data line.
2.8.2 QUADSPI cannot be used in indirect read mode when only data phase is activated
Description
When the QUADSPI peripheral is configured in indirect read with only the data phase activated (in single, dual, or
quad I/O mode), the QUADSPI peripheral hangs and the BUSY flag of the QUADSPI_SR register remains high.
An abort must be performed to reset the BUSY flag and exit the hanging state.
Workaround
Insert a dummy phase with at least two dummy cycles.
Description
Writing 0x0000 0000 to the QUADSPI_CCR register causes the QUADSPI peripheral to hang while the BUSY
flag of the QUADSPI_SR register remains set. Even an abort does not allow exiting this status.
Workaround
Clear then set the EN bit of the QUADSPI_CR register.
Description
The timing of some internal signals of the QUADSPI peripheral is critical. At certain conditions, this can lead to a
general failure of the peripheral. As these conditions cannot be exactly determined, it is recommended to
systematically apply the workaround as described.
Workaround
The code below have to be executed upon reset and upon switching from memory-mapped to any other mode:
// The following command must complete less than 127 kernel clocks after the first write to t
he QSPI_CCR register
QSPI->QSPI_CR = 0; // disable QSPI
while(QSPI->QSPI_SR & 0x20){}; // wait for busy to fall
For the worakround to be effective, it is important to complete the disable instruction less than 127 kernel clock
pulses after the first write to the QSPI_CCR register.
Description
Regardless of the number of I/O lines used (1, 2 or 4), a memory-mapped read of the last byte of the memory
region defined through the FSIZE[4:0] bitfield of the QUADSPI_DCR register always yields 0x00, whatever the
memory byte content is. A repeated attempt to read that last byte causes the AXI bus to stall.
Workaround
Apply one of the following measures:
• Avoid reading the last byte of the memory region defined through FSIZE, for example by taking margin in
FSIZE bitfield setting.
• If the last byte is read, ignore its value and abort the ongoing process so as to prevent the AXI bus from
stalling.
• For reading the last byte of the memory region defined through FSIZE, use indirect read.
2.8.6 QUADSPI memory failure when using HCLK quadspi_ker_ck clock as QUADSPI CLK
Description
When using HCLK as kernel clock for the QUADSPI peripheral and PRESCALER[7:0] bit = 0 in the
QUADSPI_CR register, memories sensitive to clock duty cycle fail at high speed because the clock does not
respect the 50% duty cycle.
Workaround
• When using HCLK as kernel clock for the QUADSPI peripheral, use a clock prescale that respects the 50%
duty cycle.
Or
• Use an alternative kernel clock source, for example, pll1_q_ck or pll2_r_ck with QSPISEL[1:0] bits in the
RCC_D1CCIPR register.
2.9 SDMMC
2.9.1 Busy signal not detected at resume point when suspend command accepted by the card
during busy phase
Description
When a card accepts a suspend command during the block busy phase of a write transfer, the card may drive the
data line 0 when the write transfer is resumed. However, the SDMMC does not detect that the data line 0 is low
when the write transfer resumes, and the resumed transfer may fail.
Workaround
Apply the following sequence to suspend a write transfer:
1. Set the DTHOLD bit in the SDMMC_CMDR register.
2. Wait until the DHOLD status flag is set in the SDMMC_STAR register, to make sure the Busy line has been
released.
3. Send a suspend command (CMDSUSPEND = 1, CMDTRANS = 0, CPSMEN = 1)
Description
During a voltage switch sequence, the host has to stop the clock at low level, and inform the software that the
clock is stopped by setting the CKSTOP status bit of the SDMMC_STAR register.
During a read wait sequence, the clock is stopped at high level for standard cards, and at low level for high-
frequency cards. In the latter case, the CKSTOP status bit is set while it should not. If it is not cleared, the next
voltage switch sequence may fail.
This issue can be observed when the following sequence is executed:
1. A multiple block read is ongoing (DTMODE[1:0] = 0b00 or 0b11, and DTDIR = 1 in the SDMMC_DCTRL
register).
2. The read wait mode using clock stop is enabled (RWSTART = 1, RWMOD = 1, and RWSTOP = 0 in the
SDMMC_DCTRLR register).
3. A high-frequency card is selected (BUSSPEED = 1 in the SDMMC_CLKCR register).
Workaround
When the multiple block transfer ends (DATAEND = 1 in the SDMMC_STAR register), set both the CKSTOPC and
the DATAENDC bits in the SDMMC_ICR register.
2.9.3 Unwanted overrun detection when an AHB error is reported while all bytes have been received
Description
When the internal DMA is used, a write initiated by the SDMMC on the AHB master bus may fail because of
software wrong access configuration. In this case, the IDMATE flag of the SDMMC_STAR register is set, and the
transfer is aborted by flushing the FIFO.
When a read transfer ends successfully (that is, all bytes have been transferred on the external SDMMC bus), the
DPSM waits until the FIFO is empty before setting the DATAEND flag in the SDMMC_STAR register. When an
AHB error occurs, the FIFO is considered empty, but some bytes may still be present in the internal receive buffer
(not yet transferred to the FIFO).
For this reason, the Rx buffer must be reset when the DPSM returns to idle state, which is always the case when
the AHB transfers correctly end, but not when an AHB error occurs. In the latter case, the next read operation fails
and an overrun is reported.
This issue can be observed when all the following conditions are met:
• A read transfer completes successfully (DTDIR = 1 in the SDMMC_DCTRLR register and DATAEND = 1 in
the SDMMC_STAR register).
• An AHB error is reported by the slave on the three last bursts of the transfer (IDMATE = 1).
Workaround
When the DATAEND flag is set, check IDMATE. If both IDMATE and DTDIR bits are set, reset the SDMMC.
2.9.4 Consecutive multiple block transfers have to be separated by eight SDMMC bus clocks when
started by setting the DTEN bit
Description
When a transfer ends, the MMC and SD standards request at least eight SDMMC bus clock cycles free before
starting a new transfer. However, when enabling a new transfer by setting the DTEN bit of the SDMMC_DCTRLR
register, a new transfer can start whereas less than eight SDMMC clock cycles have elapsed since the end of the
previous transfer. For this reason, a hardware protection is implemented to guarantee eight SDMMC bus clock
cycles free between the two transfers.
When the hardware delays the new transfer because DTEN was set less than eight cycles after the last transfer,
the number of data to transfer is not reloaded in the internal data block counter whereas it should be. As a result,
the second transfer is performed with the number of blocks configured for the previous transfer.
This issue can be observed when all the following conditions are met:
• Consecutive multiple-block transfers are done with different number of blocks to transfer.
• The second block transfer starts by setting the DTEN bit of the SDMMC_DCTRLR register.
• The second transfer is requested less than eight SDMMC bus clock cycles after the end of the previous
one.
Workaround
Before starting a new transfer, make sure that at least eight SDMMC bus clock cycles have elapsed between the
reported successful end-of-transfer and the setting of DTEN.
2.9.5 Data 2 line cannot be used to suspend double-data-rate transfers with read wait mode enabled
Description
The read wait mode allows an SDIO multiple block read to be held when the host is not ready to receive the next
bytes. When the read wait mode is enabled, the host can request a card to suspend the transfer, either by setting
the data line 2 low or by stretching the clock between two blocks.
However, when the device uses the data line 2 to suspend a double-data-rate multiple-block read transfer, the
data line 2 oscillates instead of being steadily low. As a consequence, the card may keep sending data bytes,
whereas the device is not ready to receive them. This then causes CRC errors.
This issue can be observed when all the following conditions are met:
• An SDIO double-data-rate multiple-block read is ongoing (DTMODE[1:0] = 0b00 or 0b11 in the
SDMMC_DCTRL register, DTDIR = 1 in the SDMMC_DCTRL register, and DDR = 1 in the
SDMMC_CLKCR register).
• A read wait mode using data line 2 is configured (RWSTART = 1 and RWMOD = 0 in the SDMMC_DCTRL
register).
Workaround
Apply the following measures:
• Use the clock stretching method (RWMOD = 1) instead of the data line 2, and
• make sure no command is sent between two block reads.
2.9.6 Command response and receive data end bits not checked
Description
The command response and receive data end bits are not checked by the SDMMC. A reception with only a wrong
end bit value is not detected. This does not cause a communication failure since the received command response
or data is correct.
Workaround
None.
2.10 ADC
2.10.1 New context conversion initiated without waiting for trigger when writing new context in
ADC_JSQR with JQDIS = 0 and JQM = 0
Description
Once an injected conversion sequence is complete, the queue is consumed and the context changes according to
the new ADC_JSQR parameters stored in the queue. This new context is applied for the next injected sequence
of conversions.
However, the programming of the new context in ADC_JSQR (change of injected trigger selection and/or trigger
polarity) may launch the execution of this context without waiting for the trigger if:
• the queue of context is enabled (JQDIS cleared to 0 in ADC_CFGR), and
• the queue is never empty (JQM cleared to 0 in ADC_CFGR), and
• the injected conversion sequence is complete and no conversion from previous context is ongoing
Workaround
Apply one of the following measures:
• Ignore the first conversion.
• Use a queue of context with JQM = 1.
• Use a queue of context with JQM = 0, only change the conversion sequence but never the trigger selection
and the polarity.
2.10.2 Two consecutive context conversions fail when writing new context in ADC_JSQR just after
previous context completion with JQDIS = 0 and JQM = 0
Description
When an injected conversion sequence is complete and the queue is consumed, writing a new context in
ADC_JSQR just after the completion of the previous context and with a length longer that the previous context,
may cause both contexts to fail. The two contexts are considered as one single context. As an example, if the first
context contains element 1 and the second context elements 2 and 3, the first context is consumed followed by
elements 2 and 3 and element 1 is not executed.
This issue may happen if:
• the queue of context is enabled (JQDIS cleared to 0 in ADC_CFGR), and
• the queue is never empty (JQM cleared to 0 in ADC_CFGR), and
• the length of the new context is longer than the previous one
Workaround
If possible, synchronize the writing of the new context with the reception of the new trigger.
2.10.3 Unexpected regular conversion when two consecutive injected conversions are performed in
Dual interleaved mode
Description
In Dual ADC mode, an unexpected regular conversion may start at the end of the second injected conversion
without a regular trigger being received, if the second injected conversion starts exactly at the same time than the
end of the first injected conversion. This issue may happen in the following conditions:
• two consecutive injected conversions performed in Interleaved simultaneous mode (DUAL[4:0] of
ADC_CCR = 0b00011), or
• two consecutive injected conversions from master or slave ADC performed in Interleaved mode
(DUAL[4:0]of ADC_CCR = 0b00111)
Workaround
• In Interleaved simultaneous injected mode: make sure the time between two injected conversion triggers is
longer than the injected conversion time.
• In Interleaved only mode: perform injected conversions from one single ADC (master or slave), making
sure the time between two injected triggers is longer than the injected conversion time.
Description
ADC_AWDy_OUT is set when a guarded conversion of a regular or injected channel is outside the programmed
thresholds. It is reset after the end of the next guarded conversion that is inside the programmed thresholds.
However, the ADC_AWDy_OUT signal is also reset at the end of conversion of non-guarded channels, both
regular and injected.
Workaround
When ADC_AWDy_OUT is enabled, it is recommended to use only the ADC channels that are guarded by a
watchdog.
If ADC_AWDy_OUT is used with ADC channels that are not guarded by a watchdog, take only ADC_AWDy_OUT
rising edge into account.
Description
When the AHB clock frequency is higher than the ADC clock frequency after the prescaler is applied (ratio > 10),
if a JADSTP command is issued to stop the injected conversion (JADSTP bit set to 1 in ADC_CR register) at the
end of an injected conversion, exactly when the data are available, then the injected data are stored in
ADC_JDR1 register instead of ADC_JDR2/3/4 registers.
Workaround
Before setting JADSTP bit, check that the JEOS flag is set in ADC_ISR register (end of injected channel
sequence).
2.10.6 ADC slave data may be shifted in Dual regular simultaneous mode
Description
In Dual regular simultaneous mode, ADC slave data may be shifted when all the following conditions are met:
• A read operation is performed by one DMA channel,
• OVRMOD = 0 in ADC_CFGR register (Overrrun mode enabled).
Workaround
Apply one of the following measures:
• Set OVRMOD = 1 in ADC_CFGR. This disables ADC_DR register FIFO.
• Use two DMA channels to read data: one for slave and one for master.
Description
The following conditions might impact the ADC accuracy
• Several ADC conversions are running simultaneously
• ADC and DAC conversions are running simultaneously
Workaround
Avoid conversion overlapping. The application should ensure that conversions are performed sequentially.
Description
The following ADC3 input pins may be impacted by adjacent LSE activity:
• ADC3 channels on pins PF3 to PF10.
Workaround
Avoid using 14-bit and 16-bit data resolutions on these pins. This limits data resolution configuration to 8 bits, 10
bits, or 12 bits.
Description
If VDDA is lower than 2 V, the ADC conversion accuracy is not guaranteed over the full ADC sampling rate.
Workaround
The application must avoid a sampling rate higher than 1.5 MSPS when operating with VDDA below 2 V.
Description
If VDDA is higher than 3.3 V, the ADC conversion accuracy is not guaranteed for all data resolutions.
Workaround
12-bit, 14-bit, and 16-bit data resolutions are not useful in this configuration. This limits the available data
resolution configurations to 8 bits and 10 bits.
Description
The ADC injected conversion that follows a regular conversion may be corrupted if all the following conditions are
met:
• A regular conversion successive approximation is ongoing (sampling phase finished), and
• an injected conversion sequence is triggered during the regular conversion successive approximation
phase.
In this case, the first injected conversion returns an invalid result. Other conversions are not impacted.
Workaround
Apply one of the following measures:
• Use a sequence of at least two injected conversions, ignore the first injected value and consider the other
ones.
• Synchronize regular and injected conversion to prevent regular channels and injected channels from
overlapping.
Description
Modifying the trigger selection or the edge polarity detection may trigger the conversion of the new context without
waiting for the trigger edge when all the following conditions are met:
• The injected queue conversion is enabled (JQDIS = 0 in the ADC_CGFR register), and
• the queue is never empty (JQM 0 in the ADC_CGFR register).
Workaround
Apply one of the following measures:
• Ignore the first converted sequence.
• Use the queue of context with JQM = 1 in ADC_CGFR.
• Use the queue of context with JQM = 0 in the ADC_CGFR, and change the sequence without modifying
the trigger and the polarity.
Description
Modifying the context queue for injected conversions may trigger the conversion of the new context without
waiting for the trigger edge when all the following conditions are met:
• The injected queue conversion is enabled (JQDIS = 0 in the ADC_CGFR register), and
• the queue is not empty (JQM = 0 in the ADC_CGFR register), and
• the context queue is programmed five cycles before the JEOS flag is set in the ADC_ISR register.
Workaround
Apply one of the following measures:
• Use the queue of context with JQM = 1 in the ADC_CGFR register.
• Synchronize the programming of the new context with the next trigger edge to make sure it is performed
after the JEOS flag is set in the ADC_ISR register (for example at the trigger rising edge).
2.11 DAC
2.11.1 Invalid DAC channel analog output if the DAC channel MODE bitfield is programmed before
DAC initialization
Description
When the DAC operates in Normal mode and the DAC enable bit is cleared, writing a value different from 000 to
the DAC channel MODE bitfield of the DAC_MCR register before performing data initialization causes the
corresponding DAC channel analog output to be invalid.
Workaround
Apply the following sequence:
1. Perform one write access to any data register.
2. Program the MODE bitfield of the DAC_MCR register.
2.11.2 DMA underrun flag not set when an internal trigger is detected on the clock cycle of the DMA
request acknowledge
Description
When the DAC channel operates in DMA mode (DMAEN of DAC_CR register set), the DMA channel underrun
flag (DMAUDR of DAC_SR register) fails to rise upon an internal trigger detection if that detection occurs during
the same clock cycle as a DMA request acknowledge. As a result, the user application is not informed that an
underrun error occurred.
This issue occurs when software and hardware triggers are used concurrently to trigger DMA transfers.
Workaround
None.
2.12 VREFBUF
Description
An overshoot might occur on VREFBUF output if VREF+ pin has residual voltage when VREFBUF is enabled
(ENVR is set in VREFBUF_CSR register).
Workaround
Let the voltage on the VREF+ pin drop to 1 V under the target VREFBUF_OUT. This can be achieved by switching
VREFBUF buffer off (ENVR is cleared and HIZ is cleared in VREFBUF_CSR register) allowing sufficient time to
discharge the capacitor on the VREF+ pin through the VREFBUF pull-down resistor.
Description
VREFBUF can be configured to operate in Hold mode to reduce current consumption.
When VREFBUF enters Hold mode (by setting both HIZ and ENVR bits of the VREFBUF_CSR register), the
VREF+ I/O transits to high impedance mode. If not discharged externally, the capacitor on the VREF+ pin keeps
its charge and voltage. Exiting VREFBUF Hold mode (by clearing the HIZ bit) in this condition might lead to a
voltage overshoot on the VREF+ output.
Workaround
None.
Description
After reset, the VREFBUF trimming code defined by the TRIM[5:0] bitfield of the VREFBUF calibration control
register (VREFBUF_CCR) is not automatically initialized with the trimming value stored in the device during
production test.
Workaround
Follow the steps below to program the trimming code by software:
1. Enable the SYSCFG peripheral clock by setting the SYSCFGEN bit of the RCC_APB4ENR register.
2. Enable the VREFBUF peripheral clock by setting the VREFEN bit of the RCC_APB4ENR register.
3. Program the VREFBUF trimming code (TRIM[5:0] of VREFBUF_CCR) with the value stored in bits [5:0] at
address 0x5800 0574.
2.13 OPAMP
Description
Signal limitations may be observed if the OPAMP high-speed mode is used (the OPAHSM bit is set in the
OPAMPx_CSR register).
Workaround
None.
2.14 LTDC
2.14.1 Device stalled when accessing LTDC registers while pixel clock is disabled
Description
Workaround
Enable the pixel clock before accessing the LTDC registers. Apply the following sequence to enable the LTDC
clock:
1. Enable pll3_r_ck to feed the LTDC pixel clock (ltdc_ker_ck).
2. Enable the LTDC register interface clock by setting the LTDCEN bit of the RCC_APB3ENR register.
2.15 CRYP
Description
In some reference manuals, the CRYP context swap GCM-CCM registers (CRYP_CSGCMCCMxR) section is
missing in the cryptographic processor (CRYP) chapter. These registers, described next, are required to run the
suspend/resume operations for the GCM and CCM chaining modes.
CRYP context swap GCM-CCM registers (CRYP_CSGCMCCMxR)
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CSGCMCCMx[31:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
Description These registers contain the complete internal register states of the CRYP processor when the
GCM/GMAC or CCM algorithm is selected. They are useful when a context swap has to be
performed because a high-priority task needs the cryptographic processor while it is already in
use by another task.
When such an event occurs, the CRYP_CSGCMCCM0..7R and CRYP_CSGCM0..7R (in GCM/
GMAC mode) or CRYP_CSGCMCCM0..7R (in CCM mode) registers have to be read and the
values retrieved have to be saved in the system memory space. The cryptographic processor
can then be used by the preemptive task. Then when the cryptographic computation is
complete, the saved context can be read from memory and written back into the corresponding
context swap registers.
31:0 CSGCMCCMx[31:0]: CRYP processor internal register states for GCM, GMAC, and CCM modes.
Note: This register is not used in DES/TDES or other AES modes than the ones indicated.
Workaround
No application workaround is required or applicable.
2.16 TIM
2.16.1 One-pulse mode trigger not detected in master-slave reset + trigger configuration
Description
The failure occurs when several timers configured in one-pulse mode are cascaded, and the master timer is
configured in combined reset + trigger mode with the MSM bit set:
OPM = 1 in TIMx_CR1, SMS[3:0] = 1000 and MSM = 1 in TIMx_SMCR.
The MSM delays the reaction of the master timer to the trigger event, so as to have the slave timers cycle-
accurately synchronized.
If the trigger arrives when the counter value is equal to the period value set in the TIMx_ARR register, the one-
pulse mode of the master timer does not work and no pulse is generated on the output.
Workaround
None. However, unless a cycle-level synchronization is mandatory, it is advised to keep the MSM bit reset, in
which case the problem is not present. The MSM = 0 configuration also allows decreasing the timer latency to
external trigger events.
Description
Every match of the counter (CNT) value with the compare register (CCR) value is expected to trigger a compare
event. However, if such matches occur in two consecutive counter clock cycles (as consequence of the CCR
value change between the two cycles), the second compare event is missed for the following CCR value
changes:
• in edge-aligned mode, from ARR to 0:
– first compare event: CNT = CCR = ARR
– second (missed) compare event: CNT = CCR = 0
• in center-aligned mode while up-counting, from ARR-1 to ARR (possibly a new ARR value if the period is
also changed) at the crest (that is, when TIMx_RCR = 0):
– first compare event: CNT = CCR = (ARR-1)
– second (missed) compare event: CNT = CCR = ARR
• in center-aligned mode while down-counting, from 1 to 0 at the valley (that is, when TIMx_RCR = 0):
– first compare event: CNT = CCR = 1
– second (missed) compare event: CNT = CCR = 0
This typically corresponds to an abrupt change of compare value aiming at creating a timer clock single-cycle-
wide pulse in toggle mode.
As a consequence:
• In toggle mode, the output only toggles once per counter period (squared waveform), whereas it is
expected to toggle twice within two consecutive counter cycles (and so exhibit a short pulse per counter
period).
• In center mode, the compare interrupt flag does note rise and the interrupt is not generated.
Note: The timer output operates as expected in modes other than the toggle mode.
Workaround
None.
2.16.3 Output compare clear not working with external counter reset
Description
The output compare clear event (ocref_clr) is not correctly generated when the timer is configured in the following
slave modes: Reset mode, Combined reset + trigger mode, and Combined gated + reset mode.
The PWM output remains inactive during one extra PWM cycle if the following sequence occurs:
1. The output is cleared by the ocref_clr event.
2. The timer reset occurs before the programmed compare event.
Workaround
Apply one of the following measures:
• Use BKIN (or BKIN2 if available) input for clearing the output, selecting the Automatic output enable mode
(AOE = 1).
• Mask the timer reset during the PWM ON time to prevent it from occurring before the compare event (for
example with a spare timer compare channel open-drain output connected with the reset signal, pulling the
timer reset line down).
2.17 LPTIM
2.17.1 Device may remain stuck in LPTIM interrupt when entering Stop mode
Description
This limitation occurs when disabling the low-power timer (LPTIM).
When the user application clears the ENABLE bit in the LPTIM_CR register within a small time window around
one LPTIM interrupt occurrence, then the LPTIM interrupt signal used to wake up the device from Stop mode may
be frozen in active state. Consequently, when trying to enter Stop mode, this limitation prevents the device from
entering low-power mode and the firmware remains stuck in the LPTIM interrupt routine.
This limitation applies to all Stop modes and to all instances of the LPTIM. Note that the occurrence of this issue
is very low.
Workaround
In order to disable a low power timer (LPTIMx) peripheral, do not clear its ENABLE bit in its respective LPTIM_CR
register. Instead, reset the whole LPTIMx peripheral via the RCC controller by setting and resetting its respective
LPTIMxRST bit in the relevant RCC register.
2.17.2 Device may remain stuck in LPTIM interrupt when clearing event flag
Description
This limitation occurs when the LPTIM is configured in interrupt mode (at least one interrupt is enabled) and the
software clears any flag in LPTIM_ISR register by writing its corresponding bit in LPTIM_ICR register. If the
interrupt status flag corresponding to a disabled interrupt is cleared simultaneously with a new event detection,
the set and clear commands might reach the APB domain at the same time, leading to an asynchronous interrupt
signal permanently stuck high.
This issue can occur either during an interrupt subroutine execution (where the flag clearing is usually done), or
outside an interrupt subroutine.
Consequently, the firmware remains stuck in the LPTIM interrupt routine, and the device cannot enter Stop mode.
Workaround
To avoid this issue, it is strongly advised to follow the recommendations listed below:
• Clear the flag only when its corresponding interrupt is enabled in the interrupt enable register.
• If for specific reasons, it is required to clear some flags that have corresponding interrupt lines disabled in
the interrupt enable register, it is recommended to clear them during the current subroutine prior to those
which have corresponding interrupt line enabled in the interrupt enable register.
• Flags must not be cleared outside the interrupt subroutine.
Note: The standard clear sequence implemented in the HAL_LPTIM_IRQHandler in the STM32Cube is considered as
the proper clear sequence.
2.17.3 LPTIM events and PWM output are delayed by one kernel clock cycle
Description
The compare match event (CMPM), auto reload match event (ARRM), PWM output level and interrupts are
updated with a delay of one kernel clock cycle.
Consequently, it is not possible to generate PWM with a duty cycle of 0% or 100%.
The following waveform gives the example of PWM output mode and the effect of the delay:
LPTIM_ARR 0x0A
LPTIM_CMP 0x06
LPTIM_CNT 0x05 0x06 0x07 0x08 0x09 0x0A 0x00 0x01 0x02
PWM output
CMPM = 1 ARRM = 1
Workaround
Set the compare value to the desired value minus 1. For instance in order to generate a compare match when
LPTM_CNT = 0x08, set the compare value to 0x07.
2.18 RTC
Description
When reading the calendar registers with BYPSHAD = 0, the RTC_TR and RTC_DR registers may not be locked
after reading the RTC_SSR register. This happens if the read operation is initiated one APB clock period before
the shadow registers are updated. This can result in a non-consistency of the three registers. Similarly, the
RTC_DR register can be updated after reading the RTC_TR register instead of being locked.
Workaround
Apply one of the following measures:
• Use BYPSHAD = 1 mode (bypass shadow registers), or
• If BYPSHAD = 0, read SSR again after reading SSR/TR/DR to confirm that SSR is still the same, otherwise
read the values again.
Description
One RTC interrupt request can mask another RTC interrupt request if they share the same EXTI configurable line.
For example, interrupt requests from Alarm A and Alarm B or those from tamper and timestamp events are OR-ed
to the same EXTI line (refer to the EXTI line connections table in the Extended interrupt and event controller
(EXTI) section of the reference manual).
The following code example and figure illustrate the failure mechanism: The Alarm A event is lost (fails to
generate interrupt) as it occurs in the failure window, that is, after checking the Alarm A event flag but before the
effective clear of the EXTI interrupt flag by hardware. The effective clear of the EXTI interrupt flag is delayed with
respect to the software instruction to clear it.
Alarm interrupt service routine:
void RTC_Alarm_IRQHandler(void)
{
CLEAR_ALARM_EXTI(); /* Clear the EXTI line flag for RTC alarms*/
If(ALRAF) /* Check if Alarm A triggered ISR */
{
CLEAR_FLAG(ALRAF); /* Clear the Alarm A interrupt pending bit */
PROCESS_AlarmAEvent(); /* Process Alarm A event */
}
If(ALRBF) /* Check if Alarm B triggered ISR */
{
CLEAR_FLAG(ALRBF); /* Clear the Alarm B interrupt pending bit */
PROCESS_AlarmBEvent(); /* Process Alarm B event */
}
}
Failure window:
Alarm A Flag is being set after the software checks
its value
Alarm A Flag does not raise EXTI flag because this
one is not yet hardware cleared.
Alarm B Flag
Alarm A Flag
EXTI Flag
Alarm A is never processed
If (ALRBF)
CLEAR_ If { because no interrupt is generated
DT47477V1
ALARM_ (ALRA CLEAR_FLAG(ALRBF);
ISR execution EXTI(); F) PROCESS_AlarmBEvent(); through EXTI
}
Workaround
In the interrupt service routine, apply three consecutive event flag ckecks - source one, source two, and source
one again, as in the following code example:
void RTC_Alarm_IRQHandler(void)
{
CLEAR_ALARM_EXTI(); /* Clear the EXTI's line Flag for RTC Alarm */
If(ALRAF) /* Check if AlarmA triggered ISR */
{
CLEAR_FLAG(ALRAF); /* Clear the AlarmA interrupt pending bit */
PROCESS_AlarmAEvent(); /* Process AlarmA Event */
}
If(ALRBF) /* Check if AlarmB triggered ISR */
{
CLEAR_FLAG(ALRBF); /* Clear the AlarmB interrupt pending bit */
PROCESS_AlarmBEvent(); /* Process AlarmB Event */
}
If(ALRAF) /* Check if AlarmA triggered ISR */
{
CLEAR_FLAG(ALRAF); /* Clear the AlarmA interrupt pending bit */
PROCESS_AlarmAEvent(); /* Process AlarmA Event */
}
}
2.18.3 Calendar initialization may fail in case of consecutive INIT mode entry
Description
If the INIT bit of the RTC_ISR register is set between one and two RTCCLK cycles after being cleared, the INITF
flag is set immediately instead of waiting for synchronization delay (which should be between one and two
RTCCLK cycles), and the initialization of registers may fail.
Depending on the INIT bit clearing and setting instants versus the RTCCLK edges, it can happen that, after being
immediately set, the INITF flag is cleared during one RTCCLK period then set again. As writes to calendar
registers are ignored when INITF is low, a write during this critical period might result in the corruption of one or
more calendar registers.
Workaround
After existing the initialization mode, clear the BYPSHAD bit (if set) then wait for RSF to rise, before entering the
initialization mode again.
Note: It is recommended to write all registers in a single initialization session to avoid accumulating synchronization
delays.
2.18.4 Alarm flag may be repeatedly set when the core is stopped in debug
Description
When the core is stopped in debug mode, the clock is supplied to subsecond RTC alarm downcounter even when
the device is configured to stop the RTC in debug.
As a consequence, when the subsecond counter is used for alarm condition (the MASKSS[3:0] bitfield of the
RTC_ALRMASSR and/or RTC_ALRMBSSR register set to a non-zero value) and the alarm condition is met just
before entering a breakpoint or printf, the ALRAF and/or ALRBF flag of the RTC_SR register is repeatedly set by
hardware during the breakpoint or printf, which makes any attempt to clear the flag(s) ineffective.
Workaround
None.
2.18.5 A tamper event fails to trigger timestamp or timestamp overflow events during a few cycles
after clearing TSF
Description
With the timestamp on tamper event enabled (TAMPTS bit of the RTC_CR register set), a tamper event is ignored
if it occurs:
• within four APB clock cycles after setting the CTSF bit of the RTC_SCR register to clear the TSF flag, while
the TSF flag is not yet effectively cleared (it fails to set the TSOVF flag)
• within two ck_apre cycles after setting the CTSF bit of the RTC_SCR register to clear the TSF flag, when
the TSF flag is effectively cleared (it fails to set the TSF flag and timestamp the calendar registers)
Workaround
None.
2.19 I2C
2.19.1 10-bit master mode: new transfer cannot be launched if first part of the address is not
acknowledged by the slave
Description
An I2C-bus master generates STOP condition upon non-acknowledge of I2C address that it sends. This applies to
7-bit address as well as to each byte of 10-bit address.
When the MCU set as I2C-bus master transmits a 10-bit address of which the first byte (5-bit header + 2 MSBs of
the address + direction bit) is not acknowledged, the MCU duly generates STOP condition but it then cannot start
any new I2C-bus transfer. In this spurious state, the NACKF flag of the I2C_ISR register and the START bit of the
I2C_CR2 register are both set, while the START bit should normally be cleared.
Workaround
In 10-bit-address master mode, if both NACKF flag and START bit get simultaneously set, proceed as follows:
1. Wait for the STOP condition detection (STOPF = 1 in I2C_ISR register).
2. Disable the I2C peripheral.
3. Wait for a minimum of three APB cycles.
4. Enable the I2C peripheral again.
Description
The correct use of the I2C peripheral is to disable it (PE = 0) before entering Stop mode, and re-enable it when
back in Run mode.
Some reference manual revisions may omit this information.
Failure to respect the above while the MCU operating as slave or as master in multi-master topology enters Stop
mode during a transfer ongoing on the I2C-bus may lead to the following:
1. BUSY flag is wrongly set when the MCU exits Stop mode. This prevents from initiating a transfer in master
mode, as the START condition cannot be sent when BUSY is set.
2. If clock stretching is enabled (NOSTRETCH = 0), the SCL line is pulled low by I2C and the transfer stalled as
long as the MCU remains in Stop mode.
The occurrence of such condition depends on the timing configuration, peripheral clock frequency, and I2C-
bus frequency.
This is a description inaccuracy issue rather than a product limitation.
Workaround
No application workaround is required.
2.19.3 Wrong data sampling when data setup time (tSU;DAT) is shorter than one I2C kernel clock period
Description
The I2C-bus specification and user manual specify a minimum data setup time (tSU;DAT) as:
• 250 ns in Standard mode
• 100 ns in Fast mode
• 50 ns in Fast mode Plus
The device does not correctly sample the I2C-bus SDA line when tSU;DAT is smaller than one I2C kernel clock
(I2C-bus peripheral clock) period: the previous SDA value is sampled instead of the current one. This can result in
a wrong receipt of slave address, data byte, or acknowledge bit.
Workaround
Increase the I2C kernel clock frequency to get I2C kernel clock period within the transmitter minimum data setup
time. Alternatively, increase transmitter’s minimum data setup time. If the transmitter setup time minimum value
corresponds to the minimum value provided in the I2C-bus standard, the minimum I2CCLK frequencies are as
follows:
• In Standard mode, if the transmitter minimum setup time is 250 ns, the I2CCLK frequency must be at least
4 MHz.
• In Fast mode, if the transmitter minimum setup time is 100 ns, the I2CCLK frequency must be at least
10 MHz.
• In Fast-mode Plus, if the transmitter minimum setup time is 50 ns, the I2CCLK frequency must be at least
20 MHz.
Description
In master mode, a bus error can be detected spuriously, with the consequence of setting the BERR flag of the
I2C_SR register and generating bus error interrupt if such interrupt is enabled. Detection of bus error has no
effect on the I2C-bus transfer in master mode and any such transfer continues normally.
Workaround
If a bus error interrupt is generated in master mode, the BERR flag must be cleared by software. No other action
is required and the ongoing transfer can be handled normally.
Description
If in master receiver mode or slave receive mode with SBC = 1 the following conditions are all met:
• I2C-bus stretching is enabled (NOSTRETCH = 0)
• RELOAD bit of the I2C_CR2 register is set
• NBYTES bitfield of the I2C_CR2 register is set to N greater than 1
• byte N is received on the I2C-bus, raising the TCR flag
• N - 1 byte is not yet read out from the data register at the instant TCR is raised,
then the SCL line is pulled low (I2C-bus clock stretching) and the transfer of the byte N from the shift register to
the data register inhibited until the byte N-1 is read and NBYTES bitfield reloaded with a new value, the latter of
which also clears the TCR flag. As a consequence, the software cannot get the byte N and use its content before
setting the new value into the NBYTES field.
Workaround
• In master mode or in slave mode with SBC = 1, use the reload mode with NBYTES = 1.
• In master receiver mode, if the number of bytes to transfer is greater than 255, do not use the reload mode.
Instead, split the transfer into sections not exceeding 255 bytes and separate them with repeated START
conditions.
• Make sure, for example through the use of DMA, that the byte N - 1 is always read before the TCR flag is
raised.
The last workaround in the list must be evaluated carefully for each application as the timing depends on factors
such as the bus speed, interrupt management, software processing latencies, and DMA channel priority.
Description
When the device is configured to operate at the same time as master and slave (in a multi- master I2C-bus
application), a spurious master transfer may occur under the following condition:
• Another master on the bus is in process of sending the slave address of the device (the bus is busy).
• The device initiates a master transfer by bit set before the slave address match event (the ADDR flag set in
the I2C_ISR register) occurs.
• After the ADDR flag is set:
– the device does not write I2C_CR2 before clearing the ADDR flag, or
– the device writes I2C_CR2 earlier than three I2C kernel clock cycles before clearing the ADDR flag
In these circumstances, even though the START bit is automatically cleared by the circuitry handling the ADDR
flag, the device spuriously proceeds to the master transfer as soon as the bus becomes free. The transfer
configuration depends on the content of the I2C_CR2 register when the master transfer starts. Moreover, if the
I2C_CR2 is written less than three kernel clocks before the ADDR flag is cleared, the I2C peripheral may fall into
an unpredictable state.
Workaround
Upon the address match event (ADDR flag set), apply the following sequence.
Normal mode (SBC = 0):
1. Set the ADDRCF bit.
2. Before Stop condition occurs on the bus, write I2C_CR2 with the START bit low.
Slave byte control mode (SBC = 1):
1. Write I2C_CR2 with the slave transfer configuration and the START bit low.
2. Wait for longer than three I2C kernel clock cycles.
3. Set the ADDRCF bit.
4. Before Stop condition occurs on the bus, write I2C_CR2 again with its current value.
The time for the software application to write the I2C_CR2 register before the Stop condition is limited, as the
clock stretching (if enabled), is aborted when clearing the ADDR flag.
Polling the BUSY flag before requesting the master transfer is not a reliable workaround as the bus may become
busy between the BUSY flag check and the write into the I2C_CR2 register with the START bit set.
2.19.7 START bit is cleared upon setting ADDRCF, not upon address match
Description
Some reference manual revisions may state that the START bit of the I2C_CR2 register is cleared upon slave
address match event.
Instead, the START bit is cleared upon setting, by software, the ADDRCF bit of the I2C_ICR register, which does
not guarantee the abort of master transfer request when the device is being addressed as slave. This product
limitation and its workaround are the subject of a separate erratum.
Workaround
No application workaround is required for this description inaccuracy issue.
Description
In slave transmission with clock stretching disabled (NOSTRETCH = 1 in the I2C_CR1 register), an underrun
condition occurs if the current byte transmission is completed on the I2C bus, and the next data is not yet written
in the TXDATA[7:0] bitfield. In this condition, the device is expected to set the OVR flag of the I2C_ISR register
and send 0xFF on the bus.
However, if the I2C_TXDR is written within the interval between two I2C kernel clock cycles before and three APB
clock cycles after the start of the next data transmission, the OVR flag is not set, although the transmitted value is
0xFF.
Workaround
None.
Description
When the first byte to transmit is not prepared in the TXDATA register, two bytes are required successively,
through TXIS status flag setting or through a DMA request. If the first of the two bytes is written in the I2C_TXDR
register in less than two I2C kernel clock cycles after the TXIS/DMA request, and the ratio between APB clock
and I2C kernel clock frequencies is between 1.5 and 3, the second byte written in the I2C_TXDR is not internally
detected. This causes a state in which the I2C peripheral is stalled in master mode or in slave mode, with clock
stretching enabled (NOSTRETCH = 0). This state can only be released by disabling the peripheral (PE = 0) or by
resetting it.
Workaround
Apply one of the following measures:
• Write the first data in I2C_TXDR before the transmission starts.
• Set the APB clock frequency so that its ratio with respect to the I2C kernel clock frequency is lower than
1.5 or higher than 3.
2.19.10 SDA held low upon SMBus timeout expiry in slave mode
Description
For the slave mode, the SMBus specification defines tTIMEOUT (detect clock low timeout) and tLOW:SEXT
(cumulative clock low extend time) timeouts. When one of them expires while the I2C peripheral in slave mode
drives SDA low to acknowledge either its address or a data transmitted by the master, the device is expected to
report such an expiry and release the SDA line.
However, although the device duly reports the timeout expiry, it fails to release SDA. This stalls the I2C bus and
prevents the master from generating RESTART or STOP condition.
Workaround
When a timeout is reported in slave mode (TIMEOUT bit of the I2C_ISR register is set), apply this sequence:
1. Wait until the frame is expected to end.
2. Read the STOPF bit of the I2C_ISR register. If it is low, reset the I2C kernel by clearing the PE bit of the
I2C_CR1 register.
3. Wait for at least three APB clock cycles before enabling again the I2C peripheral.
2.20 USART
2.20.1 UDR flag set while the SPI slave transmitter is disabled
Description
When the USART is used in SPI slave receive mode, the underrun flag (UDR bit of USART_ISR register) might
be set even if the SPI slave transmitter is disabled (TE bit cleared in USART_CR1 register).
Workaround
Apply one of the following measures:
• Ignore the UDR flag when the SPI slave transmitter is disabled.
• Clear the UDR flag every time it is set, even if the SPI slave transmitter is disabled.
• Write dummy data in the USART_TDR register to avoid setting the UDR flag.
Description
In SPI slave mode, at low USART baud rate with respect to the USART kernel and APB clock frequencies, the
transmission complete flag TC of the USARTx_ISR register may unduly be set before the last bit is shifted on the
transmit line.
This leads to data corruption if, based on this anticipated end-of-transmission signaling, the application disables
the peripheral before the last bit is transmitted.
Workaround
Upon the TC flag rise, wait until the clock line remains idle for more than the half of the communication clock
cycle. Then only consider the transmission as ended.
Description
In all modes, except synchronous slave mode, the received data may be corrupted if a glitch to zero shorter than
the half-bit occurs on the receive line within the second half of the stop bit.
Workaround
Apply one of the following measures:
• Either use a noiseless receive line, or
• add a filter to remove the glitches if the receive line is noisy.
Description
When a USART is issuing a DMA request to transfer data, if a concurrent transfer occurs, the requested transfer
may not be served and the DMA stream may stay locked.
Workaround
Use the alternative peripheral DMA channel protocol by setting bit 20 of the DMA_SxCR register.
This bit is reserved in the documentation and must be used only on the stream that manages data transfers for
USART peripherals.
2.20.5 Received data may be corrupted upon clearing the ABREN bit
Description
The USART receiver may miss data or receive corrupted data when the auto baud rate feature is disabled by
software (ABREN bit cleared in the USART_CR2 register) after an auto baud rate detection, while a reception is
ongoing.
Workaround
Do not clear the ABREN bit.
Description
When the ONEBIT bit is set in the USART_CR3 register (one sample bit method is used), the noise error (NE)
flag must remain cleared. Instead, this flag is set upon noise detection on the START bit.
Workaround
None.
Note: Having noise on the START bit is contradictory with the fact that the one sample bit method is used in a noise
free environment.
2.21 LPUART
Description
When a LPUART is issuing a DMA request to transfer data, if a concurrent transfer occurs, the requested transfer
may not be served and the DMA stream may stay locked.
Workaround
Use the alternative peripheral DMA channel protocol by setting bit 20 of the DMA_SxCR register.
This bit is reserved in the documentation and must be used only on the stream that manages data transfers for
LPUART peripherals.
2.21.2 Possible LPUART transmitter issue when using low BRR[15:0] value
Description
The LPUART transmitter bit length sequence is not reset between consecutive bytes, which could result in a jitter
that cannot be handled by the receiver device. As a result, depending on the receiver device bit sampling
sequence, a desynchronization between the LPUART transmitter and the receiver device may occur resulting in
data corruption on the receiver side.
This happens when the ratio between the LPUART kernel clock and the baud rate programmed in the
LPUART_BRR register (BRR[15:0]) is not an integer, and is in the three to four range. A typical example is when
the 32.768 kHz clock is used as kernel clock and the baud rate is equal to 9600 baud, resulting in a ratio of 3.41.
Workaround
Apply one of the following measures:
• On the transmitter side, increase the ratio between the LPUART kernel clock and the baud rate. To do so:
– Increase the LPUART kernel clock frequency, or
– Decrease the baud rate.
• On the receiver side, generate the baud rate by using a higher frequency and applying oversampling
techniques if supported.
2.22 SPI
Description
With empty RXFIFO, SPI can spuriously generate a DMA read request upon enabling DMA receive traffic (by
setting RXDMAEN bit), provided that the preceding completed transaction is a simplex transmission.
Workaround
Before enabling DMA Rx transfer following a completed Tx simplex transfer, perform hardware reset of the SPI
peripheral.
2.22.2 Master data transfer stall at system clock much faster than SCK
Description
With the system clock (spi_pclk) substantially faster than SCK (spi_ker_ck divided by a prescaler), SPI master
data transfer can stall upon setting the CSTART bit within one SCK cycle after the EOT event (EOT flag raise)
signaling the end of the previous transfer.
Workaround
Apply one of the following measures:
• Disable then enable SPI after each EOT event.
• Upon EOT event, wait for at least one SCK cycle before setting CSTART.
• Prevent EOT events from occurring, by setting transfer size to undefined (TSIZE = 0) and by triggering
transmission exclusively by TXFIFO writes.
Description
With non-zero setting of UDRDET[1:0] bitfield, the SPI slave can transmit the first bit of CRC pattern corrupted,
coming wrongly from the UDRCFG register instead of SPI_TXCRC. All other CRC bits come from the
SPI_TXCRC register, as expected.
Workaround
Keep TXFIFO non-empty at the end of transfer.
Description
SPI peripheral is set to its default state when disabled (SPE = 0). This flushes the FIFO buffers and resets their
occupancy flags. TXP and TXC flags become set (the latter if the TSIZE field contains zero value), triggering
interrupt if enabled with TXPIE or EOTIE bit, respectively. The resulting interrupt service can be spurious if it tries
to write data into TXFIFO to clear the TXP and TXC flags, while both FIFO buffers are inaccessible (as the
peripheral is disabled).
Workaround
Keep TXP and TXC (the latter if the TSIZE field contains zero value) interrupt disabled whenever the SPI
peripheral is disabled.
Description
With the CRC calculation disabled (CRCEN = 0), the transfer size bitfield set to a value greater than zero
(TSIZE[15:0] > 0), and the length of CRC frame set to less than 8 bits (CRCSIZE[4:0] < 00111), the last data
received in the RxFIFO may be corrupted.
Workaround
Keep the CRCSIZE[4:0] bitfield at its default setting (00111) during the data reception if CRCEN = 0 and
TSIZE[15:0] > 0.
Description
After an EOT event signaling the end of a non-zero transfer size transaction (TSIZE > 0) upon sampling the last
data bit, the software may disable the SPI peripheral. As expected, disabling SPI deactivates the SPI outputs
(SCK, MOSI and SS when the SPI operates as a master, MISO when as a slave), by making them float or
statically output their by-default levels, according to the AFCNTR bit of the SPI_CFG2 register.
With fast software execution (high PCLK frequency) and slow SPI (low SCK frequency), the SPI disable occurring
too fast may result in truncating the SPI output signals. For example, the device operating as a master then
generates an asymmetric last SCK pulse (with CPHA = 0), which may prevent the correct last data bit reception
by the other node involved in the communication.
Workaround
Apply one of the following measures or their combination:
• Add a delay between the EOT event and SPI disable action.
• Decrease the ratio between PCLK and SCK frequencies.
2.23 SAI
2.23.1 Last SAI_SCK clock pulse truncated upon disabling SAI master with NODIV set and
MCKDIV greater than one
Description
When disabling, during the communication, the SAI peripheral configured as master with the NODIV bit set
(SAI_MCLK_x master clock disabled) and the MCKDIV[5:0] bitfield value greater than one (division ratio greater
than one) in the corresponding SAI_xCR1 register , the device may truncate the last SAI_SCK_x clock pulse of
the transaction, potentially causing a failure to the external codec logic.
Workaround
Either use SAI_MCLK_x master clock (clear NODIV) or, if SAI_MCLK_x is not used, keep MCKDIV[5:0] at zero or
one.
2.23.2 Last SAI_MCLK clock pulse truncated upon disabling SAI master
Description
When disabling, during the communication, the SAI peripheral configured as master with the OUTDRIV bit of the
corresponding SAI_xCR1 register cleared, the device may truncate the last SAI_MCLK_x bit clock pulse of the
transaction, potentially causing a failure to the external codec logic.
Workaround
Set the OUTDRIV bit of the corresponding SAI_xCR1 register.
2.24 FDCAN
Description
During TTCAN initialization, writing the FDCAN TT trigger select register (FDCAN_TTTS) also affects the FDCAN
TT trigger memory configuration register (FDCAN_TTTMC).
Workaround
Avoid writing the FDCAN_TTTS register during TTCAN initialization phase.
Note: Outside the TTCAN initialization phase, write operations to FDCAN_TTTS do not impact FDCAN_TTTMC since
this register is write‑protected.
2.24.2 Wrong data may be read from message RAM by the CPU when using two FDCANs
Description
When using two FDCAN controllers, and the CPU and FDCANs simultaneously request read accesses from
message RAM, the CPU read may return erroneous data.
Note: CPU write accesses to message RAM operate correctly. CPU read accesses to message RAM operate correctly
if a single FDCAN is used at a time.
Workaround
None
Description
FDCAN may desynchronize and incorrectly receive the first bit of the frame if:
• the edge filtering is enabled (the EFBI bit of the FDCAN_CCCR register is set), and
• the end of the integration phase coincides with a falling edge detected on the FDCAN_Rx input pin
If this occurs, the CRC detects that the first bit of the received frame is incorrect, flags the received frame as faulty
and responds with an error frame.
Note: This issue does not affect the reception of standard frames.
Workaround
Disable edge filtering or wait for frame retransmission.
2.24.4 Tx FIFO messages inverted under specific buffer usage and priority setting
Description
Two consecutive messages from the Tx FIFO may be inverted in the transmit sequence if:
• FDCAN uses both a dedicated Tx buffer and a Tx FIFO (the TFQM bit of the FDCAN_TXBC register is
cleared), and
• the messages contained in the Tx buffer have a higher internal CAN priority than the messages in the Tx
FIFO.
Workaround
Apply one of the following measures:
• Ensure that only one Tx FIFO element is pending for transmission at any time:
The Tx FIFO elements may be filled at any time with messages to be transmitted, but their transmission
requests are handled separately. Each time a Tx FIFO transmission has completed and the Tx FIFO gets
empty (TFE bit of FDACN_IR set to 1) the next Tx FIFO element is requested.
• Use only a Tx FIFO:
Send both messages from a Tx FIFO, including the message with the higher priority. This message has to
wait until the preceding messages in the Tx FIFO have been sent.
• Use two dedicated Tx buffers (for example, use Tx buffer 4 and 5 instead of the Tx FIFO). The following
pseudo-code replaces the function in charge of filling the Tx FIFO:
Write message to Tx Buffer 4
Transmit Loop:
Request Tx Buffer 4 - write AR4 bit in FDCAN_TXBAR
Write message to Tx Buffer 5
Wait until transmission of Tx Buffer 4 complete (IR bit in FDCAN_IR),
read TO4 bit in FDCAN_TXBTO
Request Tx Buffer 5 - write AR5 bit of FDCAN_TXBAR
Write message to Tx Buffer 4
Wait until transmission of Tx Buffer 5 complete (IR bit in FDCAN_IR),
read TO5 bit in FDCAN_TXBTO
Description
In DAR mode, the transmission may fail due to lost arbitration at the first two identifier bits.
Workaround
Upon failure, clear the corresponding Tx buffer transmission request bit TRPx of the FDCAN_TXBRP register and
set the corresponding cancellation finished bit CFx of the FDCAN_TXBCF register, then restart the transmission.
2.25 OTG_HS
Description
When VDDUSB33 is present, and the USB idle resistor (pull-up 1 connected between VDDUSB and the ground)
remains activated for a long period of time, the pull-up resistor value may drift, reaching the maximum value
defined in the USB Specification.
This issue occurs only during device transmit and reset states in device mode. Other device states are not
impacted.
The degradation can be observed after USB PHY pull-up continuous activation in the following conditions:
• 10 years of continuous transmit operations, or
• An 86 million reset operations (from the USB host) provided that the reset period is 2.5 ms (duration might
vary depending on host reset duration).
The above results are based on design simulation.
Workaround
For USB OTG_HS1, use the external USB PHY instead of the internal PHY.
For USB OTG_HS2: no workaround is available.
2.25.2 Transmit data FIFO is corrupted when a write sequence to the FIFO is interrupted with
accesses to certain OTG_HS registers
Description
When the USB on-the-go high-speed peripheral is in Device mode, interrupting transmit FIFO write sequence with
read or write accesses to OTG_HS endpoint-specific registers (those ending in 0 or x) leads to corruption of the
next data written to the transmit FIFO.
Workaround
Ensure that the transmit FIFO write sequence is not interrupted with accesses to the OTG_HS registers. Note that
enabling DMA mode guarantees this.
2.25.3 Host packet transmission may hang when connecting the full speed interface through a hub to
a low-speed device
Description
When the USB on-the-go high-speed peripheral is used with the full speed interface (DM and DP pins, N.B. not
available on all devices), and connects to a low-speed device via a hub, the transmitter internal state machine
may hang. This leads, after a timeout expiry, to a port disconnect interrupt.
Workaround
None. However, increasing the capacitance on the data lines may reduce the occurrence.
2.26 ETH
2.26.1 Tx DMA engine may halt when a Tx queue flush command is issued in OSP mode
Description
When operating in the Operate-on-second packet (OSP) mode, the Tx DMA engine fetches the next Tx packet
from the host memory before writing the status of the packet currently transmitted from the MAC. The Tx DMA
engine accepts the transmit status in the status FIFO when the MTL has completely accepted the next packet.
When the application flushes the content of a Tx queue by setting bit 0 (FTQ) of the Tx queue operating mode
register (ETH_MTLTXQOMR) while the Tx DMA engine is active, the MTL stops accepting any further packets
until the flush command of the Tx queue is complete and all the available statuses in the status FIFO are read by
the Tx DMA engine.
However, the flush command may not complete if the Tx queue flush command is given soon after the Tx DMA
engine issues the request for fetching the descriptor of the next packet. This issue occurs only if the Tx queue
flush command is issued before the Tx DMA engine completes the descriptor fetch and attempts to write the
control word of the next packet to the Tx queue. In this scenario, the MTL does not accept the control word and
the Tx DMA engine does not accept the transmit status of the previous packet. This results in a deadlock situation
since the flush command is never complete as the status FIFO is not emptied, and no more transfers occur.
Workaround
Issue a Tx queue flush command only after checking that the Tx DMA engine is inactive (either in Stop or
Suspend state) and is not fetching any descriptor.
This can be ensured either by stopping the Tx DMA engine (by clearing the ST bit of the channel transmit control
register (ETH_DMACTXCR)) or by ensuring that Tx DMA engine has serviced all the available descriptors and is
in Suspend state. The state of the DMA engine is reflected in the TPS0 bitfield of the debug status register
(ETH_DMADSR).
2.26.2 Rx DMA engine may not recover and restart an operation after getting a bus error response
Description
When a bus error response is received while the Rx DMA engine is transferring a received packet or reading/
writing the descriptors, the Rx DMA engine enters the Stop state. In this state, if the RPF bit (Rx packet flush) in
the channel receive control register (ETH_DMACRXCR) is set, the Rx DMA engine flushes and drops the
subsequent packets intended to be serviced by this Rx DMA engine. When the application reconfigures and
restarts the Rx DMA engine, the Rx DMA engine forwards the subsequent received packets to the application.
However, the internal transaction is not stopped correctly if a bus error response is observed when the Rx DMA
engine is writing the last descriptor (final status) of a received packet.
Hence, when the application reconfigures and restarts the Rx DMA engine, it may not resume the normal packet
transfer operation from the Rx queue to the host memory.
When the RPF bit is set, this issue is observed only if no subsequent packet is intended to be serviced by the
same Rx DMA engine before the Rx DMA engine is restarted. If a subsequent packet is flushed before the Rx
DMA engine restarts, the internal error transaction correctly completes and the Rx DMA engine resumes the
packet transfer.
When the RPF bit is reset, this failure is always observed.
Workaround
When a fatal bus error interrupt is generated:
1. Read the REB bit of the channel status register (ETH_DMACSR) to check if the bus error occurred during the
Rx descriptor write operation.
2. Issue a software reset by setting the SWR bit of the ETH_DMAMR DMA mode register.
3. Reconfigure and restart the Rx DMA engine.
Note: The software must reconfigure the whole Ethernet peripheral since setting the SWR bit resets the entire
peripheral except for the standard bus interface modules.
2.26.3 In OSP mode, Tx DMA engine may not correctly stop when instructed while the Ethernet is
actively transferring data
Description
In Operate-on-second packet (OSP) mode, the Tx DMA channel can fetch the next packet from host memory
before it receives the status for the current packet transmission from the MAC. The software can stop the Tx DMA
engine at any time by clearing the ST bit of the channel transmit control register (ETH_DMACTXCR). When this
bit is cleared, the Tx DMA engine completes the transmission of the packet being transferred, closes the
descriptors of all the transmitted packets, and enters the Stop state.
When the transmit interrupt enable (TIE) bit of the channel interrupt enable register (ETH_DMACIER) is set, the
Tx DMA engine also generates the completion interrupt after the Tx status is written to the Tx descriptor in host
memory.
However, when the stop command is issued in OSP mode while the Tx DMA engine is actively transferring data,
the following issues may be observed:
• The Tx DMA engine may not generate the Tx packet completion interrupt. As a result, if the software relies
on the completion interrupt to reuse the descriptors for subsequent packets, it may be delayed until the Tx
DMA engine is restarted and the next packet is transferred.
• The Tx DMA engine may not even enter the Stop state and indefinitely wait for the Tx status from the MAC,
even though all pending statutes are already written to the respective descriptors in host memory. To exit
this state, the software must perform a soft reset, reconfigure, and restart the Tx DMA engine.
• The Tx DMA engine may unnecessarily transfer one additional Tx packet before entering the Stop state.
Workaround
Issue a stop command to the Tx DMA engine only after all Tx packets have been transferred, and the DMA
engine is in Idle (or Suspend) state. To do this:
1. Stop updating the tail pointer so that no new packets are to be scheduled for transfer.
2. Wait for the Tx DMA engine to complete the transfer of all scheduled packets. To do this, monitor the
respective TPS0 bit of the debug status register (ETH_DMADSR) until it is read as Suspend state.
2.26.4 Giant packet error is incorrectly declared when a dribble error occurs for the Rx packet whose
length is exactly equal to the giant packet limit
Description
The MAC indicates a giant packet (GP) in the Rx status when the received packet length:
• exceeds 9018, 9022, or 9026 bytes for untagged, or single VLAN tagged, or double VLAN tagged packets,
when the JE bit of the ETH_MACCR register is set
• exceeds 2000 bytes when the S2KP bit of the operating mode configuration register (ETH_MACCR) is set
• exceeds the number of bytes specified in the GPSL bitfield of the extended operating mode configuration
register (ETH_MACECR), with GPSLCE bit set in the operating mode configuration register
(ETH_MACCR)
• exceeds 1518, 1522, or 1526 bytes for untagged, or single VLAN tagged, or double VLAN tagged packets
However, if the received packet length has exactly the same number of bytes as the one specified above, and an
additional dribble nibble is received on the MII interface, then the MAC incorrectly declares it as a giant packet
(GP) in the Rx status, and incorrectly increments the alignment (dribble) error.
Workaround
When a dribble error is set, ignore the giant packet error if the PL field provided in the Rx status is equal to the
programmed giant limit (not considering the CRC/tag stripping effects).
2.26.5 Subsequent packets are not transmitted when the transmit queue is flushed during packet
transmission
Description
When the transmit queue is flushed, the MTL layer completes the ongoing packet transmission and waits for a
status from the MAC layer. This status is provided to the application by updating the FF bit of the TDES0 transmit
descriptor word0. The MTL layer provides a dummy status with the FF bit set for every packet flushed in the
transmit queue. After the transmit queue flush operation is complete, the transmission restarts for packets
received from the application.
However, when the flush occurs during the second word of the packet being provided to the MAC layer, the
subsequent packets after the flush operation are not accepted for transmission by the MAC layer.
Workaround
Make sure the Tx path is inactive before issuing a Tx queue flush command. To do this, follow the following steps:
1. Make sure the Tx DMA engine is inactive (either in the Stop state or Suspend state), and not fetching any
descriptor. To do this, stop the Tx DMA engine (by clearing the ST bit of the channel transmit control register
(ETH_DMACTXCR)) or ensure that the Tx DMA engine has serviced all the available descriptors, and is in
Suspend state. The state of the DMA engine is reflected in the TPS0 bitfield of the ETH_DMADSR register.
2. Make sure the Tx MTL is inactive. To do this, check that all the bits of the Tx queue debug register
(ETH_MTLTXQDR ) return 0.
3. Make sure the Tx MAC is inactive. To do this, check that all the bits of the MAC debug register (ETH_MACDR)
return 0.
2.26.6 Read-on-clear interrupt status not updated when an event occurs on the same clock cycle as a
status register read
Description
The read-on-clear interrupt status bits are cleared when the status register is read. The read operation returns the
correct status value just before it is cleared due to the read operation.
However, the interrupt status bits are not updated for a new event when a new interrupt event occurs on the same
cycle clock during which the clear pulse to the register is generated.
The following interrupt status bits of the interrupt status register (ETH_MACISR) are affected:
• RXSTSIS
• TXSTSIS
• TSIS
• LPIIS
• PMTIS
• PHYIS
Due to exceptions, RXSTIS and TXSTIS correspond to packet abort events in Rx path and Tx path, respectively.
All the other bits correspond to optional features (EEE, 1588 timestamping, PMT low-power mode, PHY interface
and GPIO). These interrupt events are not frequent, and are not related to normal operation.
If the software misses these exception interrupt events, it is not able to take corrective actions or responses.
Workaround
None.
2.26.7 Context descriptor contains incorrect receive timestamp status in Threshold mode when
application clock is very fast
Description
When the Rx timestamp status is available on the ARI interface, the Rx DMA engine writes the context descriptor
containing the receive timestamp status to the descriptor memory.
However, the Rx DMA engine may provide an incorrect receive timestamp status in the context descriptor written
to descriptor memory, if all of the following conditions are met:
• The application clock is very high compared to receive clock,
• the MTL Rx queue operates in Threshold mode, and
• the Rx queue is empty on the read controller side after the receive status word is read out.
As a result, the Rx DMA engine writes an incorrect timestamp status value to the context descriptor, which may
result in an incorrect time correction and/or delay in PTP time synchronization.
This failure is observed only when the application clock frequency is twenty times the MII clock frequency and
there are minimal delays on the arbitration and on the read/write access times.
Workaround
Operate the Rx queue in Store-and-forward mode.
2.26.8 Context descriptor is incorrectly written to descriptor memory when the Rx timestamp status is
dropped due to unavailability of space in Rx queue
Description
When the Rx timestamp status is captured for a given packet but dropped due to the fact that no more space is
available in the MTL Rx queue, the Rx DMA engine sets both the timestamp available (TA) and timestamp
dropped (TD) status bits in the last descriptor for this packet, and skips writing the context descriptor as
timestamp information is not available.
However, due to a defect, the context descriptor is written to the descriptor memory with invalid Rx timestamp
status, and the Rx DMA engine incorrectly makes context writing decision based only on TA status bit, ignoring
the TD status bit.
There is no functional impact if the software ignores the next context descriptor based on the setting of the TD
status bit. However, this redundant descriptor write operation wastes a descriptor location and unnecessarily
consumes system bandwidth.
Workaround
When the TD status bit of RDES1 is set, ignore the next descriptor if it is a context descriptor.
2.26.9 MAC may indicate a power-down state even when disabled by software
Description
Upon writing 1 to the PWRDWN bit of the PMT control status register (ETH_MACPCSR), the MAC enters power-
down state and the receiver drops all the received packets until it receives the expected magic packet or the
remote wakeup packet. The PWRDWN bit is then self-cleared and the power-down mode is disabled. The
PWRDWN bit can also be cleared by software to exit power-down state.
However, the PWRDWN bit of ETH_MACPCSR may not be effectively cleared when the software resets it.
Workaround
Clear the PWRDWN bit twice.
2.26.10 Incorrect Tx FIFO fill-level generation when MAC switches from Full-duplex to Half-duplex
mode
Description
The MAC can switch between Half-duplex and Full-duplex modes based on the result of the autonegotiation
operation. It seamlessly switches between these modes without affecting the subsequent traffic.
When a collision occurs in Half-duplex mode, the MAC fetches the packet from the Tx queue and transmits it
again. To enable this function, the pointer to the start-of-packet is stored in the read controller logic. When the
number of bytes transmitted exceeds the collision window or if the packet is transmitted completely without
collision, this pointer is updated with the current read pointer and transferred to the write controller to indicate that
these locations are now available for storing subsequent packets/data. In Full-duplex mode, this "retry" pointer is
not required and it is cleared.
However, when the MAC switches from Full-duplex to Half-duplex mode, this pointer is not updated with the
current active read pointer.
This results in an incorrect FIFO fill-level generation and a non-empty Tx queue status. This is reflected in
TXQSTS bit of the Tx queue debug register (ETH_MTLTXQDR) even when the Tx queue is actually empty, falsely
indicating that the Tx path is not Idle and the packet is still waiting to be transmitted.
Workaround
Flush the Tx queue by setting the FTQ bit in the Tx queue operating mode register (ETH_MTLTXQOMR)
immediately after switching from Full-duplex to Half-duplex mode. This clears the write pointer and synchronizes
again the read and write pointers.
2.26.11 The MAC does not provide bus access to a higher priority request after a low priority request is
serviced
Description
The ETH_DMAMR DMA mode register in the MAC can be programmed to arbitrate between the DMA channels to
access the system bus:
• Use a weighted round robin (WRR) algorithm for selecting between transmit or receive DMA channels by
clearing DA bit
• Give higher priority to transmit or receive DMA channels by programming the TXPR bit of the
ETH_DMAMR register
• Select the priority ratio of TX over RX or vice versa (as per TXPR) by programming the PR[2:0] field
For the WRR algorithm, the MAC provides bus access to a higher priority request provided it is within the priority
ratio. It services a lower priority request only when higher priority requests have been serviced as per priority ratio
or when there are no higher priority requests.
However, in the WRR algorithm operation, when there are requests pending from both Tx DMA engine and Rx
DMA engine after a lower priority request gets serviced, the MAC incorrectly selects the lower priority request,
thus violating the PR ratio. The MAC continues to service all the subsequent low priority requests until there are
no low priority requests, before servicing any high priority request.
This results in a delay in servicing the higher priority requests. If the high priority request is programmed for
receive DMA channels (TXPR is cleared), the receive queue can overflow with a resulting loss of packets. If the
high priority request is programmed for transmit DMA (TXPR is set) channels, the transmit queue can get starved
in store and forward mode resulting in low throughput. Otherwise when operating in threshold mode, the transmit
queue can underflow, resulting in discarding of packet by remote end. In both cases the quality of service or
throughput may be affected.
Also, when priority ratio of 8:1 is programmed, the serviced request count rolls over to 0 after reaching 7 and does
not reach maximum value which is 8. So, if the higher priority request is being serviced, lower priority request
does not get serviced until there is no higher priority request.
These issues do not affect the functionality but impacts the performance.
Workaround
None.
2.26.12 Rx DMA engine may fail to recover upon a restart following a bus error, with Rx timestamping
enabled
Description
When the timestamping of the Rx packets is enabled, some or all of the received packets can have an Rx
timestamp which is written into a descriptor upon the completion of the Rx packet/status transfer.
However, when a bus error occurs during the descriptor read (that is subsequently used as context descriptor to
update the Rx timestamp), the context descriptor write is skipped by the DMA engine. Also, the Rx DMA engine
does not flush the Rx timestamp stored in the intermediate buffers during the error recovery process and enters
stop state. Due to this residual timestamp in the intermediate buffer remaining after the restart, the Rx DMA
engine does not transfer any packets.
Workaround
Issue a soft reset to drop all Tx packets and Rx packets present inside the controller at the time of a bus error.
After the soft reset, reconfigure the controller and re-create the descriptors.
Note: The workaround introduces additional latency.
2.26.13 Tx DMA engine fails to recover correctly or corrupts TSO/USO header data on receiving a bus
error response from the AHB DMA slave
Description
When a bus error is received from the AHB DMA slave, the controller generates an interrupt by setting the FBE bit
of the ETH_DMACSR register. This stops the corresponding DMA channel by resetting the ST bit of the
ETH_DMACTXCR register after recovering from the error. The software recreates the list of descriptors and
restarts the DMA engine by setting the ST bit 0 of the ETH_DMACTXCR register without issuing the software
reset to the controller.
However, the Tx DMA engine fails to recover or corrupts the TSO/USO header data when the TSO/USO
segmentation is enabled in the Tx Descriptor and if either:
• a bus error is detected while transferring the header data from the system memory
• a bus error occurs for the intermediate beat transfer of the header data
In this case the first packet (with TSO/USO enabled after re-starts) gets corrupted after the DMA engine restarts.
Workaround
Issue a soft reset to recover from this scenario. Issuing a soft reset results in loss of all Tx packets and Rx
packets present inside the controller at the time of bus-error. Also, the software must reconfigure the controller
and re-create the descriptors. This is an overhead which introduces additional latency.
2.26.14 Incorrectly weighted round robin arbitration between Tx and Rx DMA channels to access the
common host bus
Description
The Ethernet peripheral has independent transmit (Tx) and receive (Rx) DMA engines. The transaction requests
from the Tx and Rx DMA engines are arbitrated to allow access to the common DMA master interface. The
following two types of arbitrations are supported by programming Bit DA of the ETH_DMAMR register:
• Weighted round-robin arbitration
• Fixed-priority arbitration
The PR[2:0] bit field controls the ratio of the weights between the Tx DMA and Rx DMA engines in the weighted
round robin scheme.
However, the programmed polarity ratio PR[2:0] in the weighted round-robin scheme is not adhered to, when
there is a priority difference between Rx and Tx. In other words when Rx DMA engine is given higher priority over
Tx DMA engine or vice-versa.
The defect occurs in the following conditions:
• The weighted round robin arbitration scheme is selected by clearing the DA bit of the ETH_DMAMR
• Programming different weights in the TXPR and PR fields of ETH_DMAMR
• Both Tx and Rx DMA engines are simultaneously requesting for access.
As a consequence, the expected quality of service (QoS) requirement between Tx and Rx DMA channels for host
bus bandwidth allocation might not get adhered to. This defect might have an impact only if the host bus
bandwidth is limited and close to or above the total Ethernet line rate traffic. The impact can be in terms of buffer
underflow (for Tx in cut-through mode) or Buffer overflows (for Rx). If the host side bandwidth is much more than
the Ethernet line rate traffic, then this bandwidth allocation of WRR scheme is of no consequence.
Workaround
Operate in fixed priority arbitration mode where the DA bit of the ETH_DMAMR is set with Rx DMA engine having
a higher priority over Tx clearing the TXPR bit. Operate the Tx buffers in Store-and-Forward mode to avoid any
buffer underflows/overflows.
Description
Received corrupted IP packets with payload (for IPv4) or total (IPv6) length of less than two bytes for L4 source
port (SP) filtering or less than four bytes for L4 destination port (DP) filtering are expected to cause a mismatch.
However, the inverse filtering unduly flags a match and the corrupted packets are forwarded to the software
application. The L4 stack gets incomplete packet and drops it.
Note: The perfect filtering correctly reports a mismatch.
Workaround
None.
2.26.16 IEEE 1588 Timestamp interrupt status bits are incorrectly cleared on write access to the CSR
register with similar offset address
Description
When RCWE bit of the ETH_MACCSRSWCR register is set, all interrupt status bits (events) are cleared only
when the specific status bits are set.
However, the status bits[3:0] of the ETH_MACTSSR register at address 0x0B20 are unintentionally cleared when
1 is written to the corresponding bit positions in any CSR register with address offset [7:0] = 0x20. The Status
bits[3:0] correspond to the following events:
• Timestamp seconds register overflow interrupt TSSOVF
• Auxiliary timestamp trigger snapshot AUXTSTRIG
• Target time interrupt TSTARGT0
• Target time programming error interrupt TSTRGTERR0
This defect occurs only when the software enables the write 1 to clear interrupt status bits, by setting RCWE of
the ETH_MACCSRSWCR register.
As a consequence, when any of the target time interrupts or timestamp seconds overflow events occur, the
software might inadvertently clear the corresponding status bits and as a concequence de-assert the interrupt, if it
first writes to any CSR register at the shadow address (0x0_xx20 or 0x1_xx20). Consequently, the interrupt
service routine might not identify the source of these interrupt events, as the corresponding status bits are already
cleared.
Note: The timestamp seconds register overflow event is extremely rare (once in ~137 years) and the target time error
interrupt can be avoided by appropriate programming. The frequency of target time reached interrupt events
depends on the application usage.
Workaround
When RCWE is set and the timestamp event interrupts are enabled, process and clear the MAC timestamp
interrupt events first in the interrupt service routine software, so that write operations to other shadow CSR
registers are avoided.
2.26.17 Bus error along with Start-of-Packet can corrupt the ongoing transmission of MAC generated
packets
Description
If a bus error is asserted along with the start of a new packet while the MAC is transmitting an internally generated
packet such as: ARP, PTO or Pause, the error indication aborts the ongoing transmission prematurely and
corrupts the MAC generated packet being transmitted.
As a consequence, the MAC generated packet is sent on the line as a runt frame with corrupted FCS. The
aborted packet is not retransmitted and can cause:
• Failure of the intended flow control in case of a Pause/PFC packet corruption.
• Delay in ARP handshake from ARP offload engine; the ARP stack recovers because it sends ARP
requests periodically
• Delay in PTP response/SYNC packets generated by PTP offload engine; the PTP stack recovers because
it sends request packets periodically.
The probability of occurrence of an bus error on the first beat of data and coinciding with a MAC generated packet
transmission is very low.
Workaround
None.
Description
Setting the RWTU[1:0] bitfield of the ETH_DMACRXIWTR register to a non-zero value while the RWT[7:0] bitfield
is at zero leads to a spurious receive watchdog timeout interrupt (if enabled) and, as a consequence, to executing
an unnecessary interrupt service routine with no packets to process.
Workaround
Ensure that the RWTU[1:0] bitfield is not set to a non-zero value while the RWT[7:0] bitfield is at zero. For setting
RWT[7:0] and RWTU[1:0] bitfields each to a non-zero value, perform two successive writes. The first is either a
byte-wide write to the byte containing the RWT[7:0] bitfield, or a 32-bit write that only sets the RWT[7:0] bitfield
and keeps the RWTU[1:0] bitfield at zero. The second is either a byte-wide write to the RWTU[1:0] bitfield or a
32‑bit write that sets the RWTU[1:0] bitfield while keeping the RWT[7:0] bitfield unchanged.
Description
The use of the fine correction method for correcting the IEEE 1588 internal time reference, combined with a large
frequency drift of the driving clock from the grandmaster source clock, leads to an incorrect interval of the flexible
PPS output used in Pulse train mode. As a consequence, external devices synchronized with the flexible PPS
output of the device can go out of synchronization.
Workaround
Use the coarse method for correcting the IEEE 1588 internal time reference.
2.26.20 Packets dropped in RMII 10 Mbps mode due to fake dribble and CRC error
Description
When operating with the RMII interface at 10 Mbps, the Ethernet peripheral may generate a fake extra nibble of
data repeating the last packet (nibble) of the data received from the PHY interface. This results in an odd number
of nibbles and is flagged as a dribble error. As the RMII only forwards to the system completed bytes of data, the
fake nibble would be ignored and the issue would have no consequence. However, as the CRC error is also
flagged when this occurs, the error-packet drop mechanism (if enabled) discards the packets.
Note: Real dribble errors are rare. They may result from synchronization issues due to faulty clock recovery.
Workaround
When using the RMII 10 MHz mode, disable the error-packet drop mechanism by setting the FEP bit of the
ETH_MTLRXQOMR register. Accept packets of transactions flagging both dribble and CRC errors.
Description
When the Target Protocol Address of a received ARP request packet matches the device IP address set in the
ETH_MACARPAR register, the source MAC address in the SHA field of the ARP request packet is compared with
the device MAC address in ETH_MACA0LR and ETH_MACA0HR registers (Address0), to filter out ARP packets
that are looping back.
Instead, a byte-swapped comparison is performed by the device. As a consequence, the packet is forwarded to
the application as a normal packet with no ARP indication in the packet status, and the device does not generate
an ARP response.
For example, with the Address0 set to 0x6655 4433 2211:
• If the SHA field of the received ARP packet is 0x6655 4433 2211, the ARP response is generated while it
should not.
• If the SHA field of the received ARP packet is 0x1122 3344 5566, the ARP response not is generated while
it should.
Workaround
Parse the received frame by software and send the ARP response if the source MAC address matches the
byte‑swapped Address0.
2.26.22 Tx DMA may halt while fetching TSO header under specific conditions
Description
Workaround
Ensure that Tx DMA initiates a burst of at least two beats when fetching header bytes from the system memory,
through one of the following measures:
• Disable address-aligned beats by clearing the AAL bit of the ETH_DMASBMR register.
• Align the buffer address pointing to the packet start to a data width boundary (set the bits[2:0] of the
address to zero for 64-bit data width).
• Set the buffer address pointing to the packet start to a value that ensures a burst of minimum two beats
when AAL = 1.
2.27 CEC
Description
When the CEC communication start bit transmitted by the device is corrupted by another device on the CEC line,
the CEC transmission is stalled.
This failure is unlikely to happen as the CEC start bit corruption by another device can only occur if that device
does not respect the CEC communication protocol.
The start bit timing standard tolerances are shown in Figure 3. The start bit is initiated by the device by driving the
CEC line low (reference point). After 3.7 ms, the device releases the CEC line and starts checking its level. The
following conditions must be met for the start bit to be valid:
• the CEC line goes high no later than 3.9 ms (4.05 ms with extended tolerance) from the reference point
• a falling edge on the CEC line does not occur earlier than 4.3 ms (4.15 ms with extended tolerance) from
the reference point
If one of these conditions is not met, the transmission is aborted and never automatically retried. No error flag is
set and the TXSOM (Tx Start Of Message) bit is not cleared.
High impedance
CEC line
Low impedance
Time [ms]
DT50963V1
0 3.5 3.7 3.9 4.3 4.5 4.7
Reference point
Workaround
The only way to detect this error is for the application software to start a timeout when setting the TXSOM bit,
restart it upon ARBLST or any RX event (as the transmission can be delayed by interleaved reception), and stop
it upon TXBR (proof that the start bit was transmitted successfully) or TXEND event, or upon any TX error (which
clears TXSOM). If the timeout expires (because none of those events occurred), the application software must
restart the CEC peripheral and retransmit the message.
Description
In normal receiving mode, any CEC message with destination address different from the own address should
normally be ignored and have no effect to the CEC peripheral. Instead, such a message is unduly written into the
reception buffer and sets the CEC peripheral to a state in which any subsequent message with the destination
address equal to the own address is rejected (NACK), although it sets RXOVR flag (because the reception buffer
is considered full) and generates (if enabled) an interrupt. This failure can only occur in a multi-node CEC
framework where messages with addresses other than own address can appear on the CEC line.
The listen mode operates correctly.
Workaround
Use listen mode (set LSTEN bit) instead of normal receiving mode. Discard messages to single listeners with
destination address different from the own address of the CEC peripheral.
Description
During the transmission of a 0 or a 1, the HDMI-CEC drives the open-drain output to high-Z, so that the external
pull-up implements a voltage rising ramp on the CEC line.
In some load conditions, with several powered-off devices connected to the HDMI-CEC line, the rising voltage
may not drive the HDMI-CEC GPIO input buffer to VIH within two HDMI-CEC clock cycles from the high-Z
activation to TXERR flag assertion.
Workaround
Limit the maximum number of devices connected to the HDMI-CEC line to ensure the GPIO VIH threshold is
reached within a time of two HDMI-CEC clock cycles (~61 µs).
The maximum equivalent 10%-90% rise time for the HDMI-CEC line is 111.5 µs, considering a VIH threshold
equal to 0.7 x VDD.
Revision history
Table 6. Document revision history
Contents
1 Summary of device errata. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2 Description of device errata. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1 Arm 32-bit Cortex-M7 core. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.1 Data corruption when using data cache configured in write-through . . . . . . . . . . . . . . . . . . 8
2.1.2 PLD might perform linefill to address that would generate a MemManage Fault . . . . . . . . . 9
2.1.3 Software programming errors might not be reported for online MBIST access to the
ICACHE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.1.4 ECC error causes data corruption when the data cache error bank registers are locked. . 11
2.1.5 Store after cache invalidate without intervening barrier might cause inconsistent
memory view. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1.6 Cortex®-M7 FPU interrupt not present on NVIC line 81. . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2 System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2.1 Timer system breaks do not work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2.2 Clock recovery system synchronization with USB SOF does not work . . . . . . . . . . . . . . . 12
2.2.3 SysTick external clock is not HCLK/8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2.4 Option byte loading can be done with the user wait-state configuration . . . . . . . . . . . . . . 12
2.2.5 Flash memory BusFault address register may not be valid when an ECC double
error occurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2.6 Flash ECC address register may not be updated . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2.7 PCROP-protected areas in flash memory may be unprotected . . . . . . . . . . . . . . . . . . . . 13
2.2.8 Flash memory bank swapping may impact embedded flash memory interface behavior . 13
2.2.9 Reading from AXI SRAM may lead to data read corruption . . . . . . . . . . . . . . . . . . . . . . . 13
2.2.10 Clock switching does not work when an LSE failure is detected by CSS. . . . . . . . . . . . . . 13
2.2.11 RTC stopped when a system reset occurs while the LSI is used as clock source . . . . . . . 14
2.2.12 USB OTG_FS PHY drive limited on DP/DM pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.2.13 Unexpected leakage current on I/Os when VIN higher that VDD . . . . . . . . . . . . . . . . . . . . 14
2.2.14 LSE oscillator driving capability selection bits are swapped . . . . . . . . . . . . . . . . . . . . . . . 14
2.2.15 HRTIM internal synchronization does not work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2.16 Device stalled when two consecutive level regressions occur without accessing
from/to backup SRAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2.17 Invalid flash memory CRC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2.18 GPIO assigned to DAC cannot be used in output mode when the DAC output is
connected to on-chip peripheral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2.19 Unstable LSI when it clocks RTC or CSS on LSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2.20 480 MHz maximum CPU frequency not available . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2.21 VDDLDO is not available on TFBGA100 package. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2.22 WWDG not functional when VDD is lower than 2.7 V and VOS0 or VOS1 voltage
level is selected. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2.23 A tamper event does not erase the backup RAM when the backup RAM clock is disabled 17
2.2.24 LSE CSS detection occurs even when the LSE CSS is disabled . . . . . . . . . . . . . . . . . . . 17
2.2.25 Output current sunk or sourced by Pxy_C pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2.26 Ethernet MII mode is not available on packages with PC2_C/PC3_C pins . . . . . . . . . . . . 17
2.2.27 HASH input data may be corrupted when DMA is used . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2.28 LSE crystal oscillator may be disturbed by transitions on PC13 . . . . . . . . . . . . . . . . . . . . 18
2.2.29 Inaccurate LSE frequency in oscillator bypass mode in combination with VBAT mode . . . 18
2.3 MDMA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.3.1 Non-flagged MDMA write attempts to reserved area . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.4 BDMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.4.1 BDMA disable failure and error flag omission upon simultaneous transfer error and
global flag clear. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.5 DMAMUX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.5.1 SOFx not asserted when writing into DMAMUX_CFR register . . . . . . . . . . . . . . . . . . . . . 19
2.5.2 OFx not asserted for trigger event coinciding with last DMAMUX request . . . . . . . . . . . . . 19
2.5.3 OFx not asserted when writing into DMAMUX_RGCFR register . . . . . . . . . . . . . . . . . . . . 20
2.5.4 Wrong input DMA request routed upon specific DMAMUX_CxCR register write
coinciding with synchronization event . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.5.5 DMAMUX_RGCFR register is write-only, not read-write . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.6 DMA2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.6.1 DMA2D swap byte feature is not available . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.7 FMC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.7.1 Dummy read cycles inserted when reading synchronous memories . . . . . . . . . . . . . . . . . 21
2.7.2 Wrong data read from a busy NAND memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.7.3 Spurious clock stoppage with continuous clock feature enabled . . . . . . . . . . . . . . . . . . . . 21
2.7.4 Unsupported read access with unaligned address . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.8 QUADSPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.8.1 First nibble of data not written after dummy phase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.8.2 QUADSPI cannot be used in indirect read mode when only data phase is activated. . . . . 22
2.8.3 QUADSPI hangs when QUADSPI_CCR is cleared . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.8.4 QUADSPI internal timing criticality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.8.5 Memory-mapped read of last memory byte fails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.8.6 QUADSPI memory failure when using HCLK quadspi_ker_ck clock as QUADSPI CLK . . 23
2.9 SDMMC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.9.1 Busy signal not detected at resume point when suspend command accepted by the
card during busy phase. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.9.2 Clock stop reported during read wait sequence. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.9.3 Unwanted overrun detection when an AHB error is reported while all bytes have
been received . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.9.4 Consecutive multiple block transfers have to be separated by eight SDMMC bus
clocks when started by setting the DTEN bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.9.5 Data 2 line cannot be used to suspend double-data-rate transfers with read wait
mode enabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.9.6 Command response and receive data end bits not checked . . . . . . . . . . . . . . . . . . . . . . . 25
2.10 ADC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.10.1 New context conversion initiated without waiting for trigger when writing new context
in ADC_JSQR with JQDIS = 0 and JQM = 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.10.2 Two consecutive context conversions fail when writing new context in ADC_JSQR
just after previous context completion with JQDIS = 0 and JQM = 0 . . . . . . . . . . . . . . . . . 26
2.10.3 Unexpected regular conversion when two consecutive injected conversions are
performed in Dual interleaved mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.10.4 ADC_AWDy_OUT reset by non-guarded channels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.10.5 Injected data stored in the wrong ADC_JDRx registers. . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.10.6 ADC slave data may be shifted in Dual regular simultaneous mode . . . . . . . . . . . . . . . . . 27
2.10.7 Conversion overlap might impact the ADC accuracy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.10.8 ADC3 resolution limited by LSE activity. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.10.9 ADC maximum sampling rate when VDDA is lower than 2 V . . . . . . . . . . . . . . . . . . . . . . . 28
2.10.10 ADC maximum resolution when VDDA is higher than 3.3 V . . . . . . . . . . . . . . . . . . . . . . . . 28
2.10.11 First ADC injected conversion in a sequence may be corrupted . . . . . . . . . . . . . . . . . . . . 28
2.10.12 Conversion triggered by context queue register update . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.10.13 Updated conversion sequence triggered by context queue update . . . . . . . . . . . . . . . . . . 29
2.11 DAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.11.1 Invalid DAC channel analog output if the DAC channel MODE bitfield is programmed
before DAC initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.11.2 DMA underrun flag not set when an internal trigger is detected on the clock cycle of
the DMA request acknowledge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.12 VREFBUF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.12.1 Overshoot on VREFBUF output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.12.2 VREFBUF Hold mode cannot be used . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.12.3 VREFBUF trimming code not automatically initialized after reset . . . . . . . . . . . . . . . . . . . 30
2.13 OPAMP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.13.1 OPAMP high-speed mode must not be used . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.14 LTDC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.14.1 Device stalled when accessing LTDC registers while pixel clock is disabled . . . . . . . . . . . 31
2.15 CRYP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.15.1 CRYP_CSGCMCCMxR registers are missing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.16 TIM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.16.1 One-pulse mode trigger not detected in master-slave reset + trigger configuration . . . . . . 32
2.16.2 Consecutive compare event missed in specific conditions . . . . . . . . . . . . . . . . . . . . . . . . 32
2.16.3 Output compare clear not working with external counter reset . . . . . . . . . . . . . . . . . . . . . 33
2.17 LPTIM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.17.1 Device may remain stuck in LPTIM interrupt when entering Stop mode . . . . . . . . . . . . . . 33
2.17.2 Device may remain stuck in LPTIM interrupt when clearing event flag . . . . . . . . . . . . . . . 34
2.17.3 LPTIM events and PWM output are delayed by one kernel clock cycle . . . . . . . . . . . . . . . 34
2.18 RTC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.18.1 RTC calendar registers are not locked properly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.18.2 RTC interrupt can be masked by another RTC interrupt . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.18.3 Calendar initialization may fail in case of consecutive INIT mode entry . . . . . . . . . . . . . . . 36
2.18.4 Alarm flag may be repeatedly set when the core is stopped in debug . . . . . . . . . . . . . . . . 37
2.18.5 A tamper event fails to trigger timestamp or timestamp overflow events during a few
cycles after clearing TSF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.19 I2C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.19.1 10-bit master mode: new transfer cannot be launched if first part of the address is
not acknowledged by the slave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.19.2 Wrong behavior in Stop mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.19.3 Wrong data sampling when data setup time (tSU;DAT) is shorter than one I2C kernel
clock period. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.19.4 Spurious bus error detection in master mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.19.5 Last-received byte loss in reload mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.19.6 Spurious master transfer upon own slave address match . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.19.7 START bit is cleared upon setting ADDRCF, not upon address match . . . . . . . . . . . . . . . 40
2.19.8 OVR flag not set in underrun condition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.19.9 Transmission stalled after first byte transfer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.19.10 SDA held low upon SMBus timeout expiry in slave mode . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.20 USART . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.20.1 UDR flag set while the SPI slave transmitter is disabled . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.20.2 Anticipated end-of-transmission signaling in SPI slave mode . . . . . . . . . . . . . . . . . . . . . . 41
2.20.3 Data corruption due to noisy receive line. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.20.4 DMA stream locked when transferring data to/from USART . . . . . . . . . . . . . . . . . . . . . . . 42
2.20.5 Received data may be corrupted upon clearing the ABREN bit. . . . . . . . . . . . . . . . . . . . . 42
2.20.6 Noise error flag set while ONEBIT is set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.21 LPUART . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.21.1 DMA stream locked when transferring data to/from LPUART . . . . . . . . . . . . . . . . . . . . . . 42
2.21.2 Possible LPUART transmitter issue when using low BRR[15:0] value. . . . . . . . . . . . . . . . 43
2.22 SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.22.1 Spurious DMA Rx transaction after simplex Tx traffic . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.22.2 Master data transfer stall at system clock much faster than SCK . . . . . . . . . . . . . . . . . . . 43
2.22.3 Corrupted CRC return at non-zero UDRDET setting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.26.13 Tx DMA engine fails to recover correctly or corrupts TSO/USO header data on
receiving a bus error response from the AHB DMA slave . . . . . . . . . . . . . . . . . . . . . . . . . 53
2.26.14 Incorrectly weighted round robin arbitration between Tx and Rx DMA channels to
access the common host bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
2.26.15 Incorrect L4 inverse filtering results for corrupted packets. . . . . . . . . . . . . . . . . . . . . . . . . 54
2.26.16 IEEE 1588 Timestamp interrupt status bits are incorrectly cleared on write access to
the CSR register with similar offset address . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
2.26.17 Bus error along with Start-of-Packet can corrupt the ongoing transmission of MAC
generated packets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
2.26.18 Spurious receive watchdog timeout interrupt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
2.26.19 Incorrect flexible PPS output interval under specific conditions . . . . . . . . . . . . . . . . . . . . . 55
2.26.20 Packets dropped in RMII 10 Mbps mode due to fake dribble and CRC error. . . . . . . . . . . 55
2.26.21 ARP offload function not effective . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
2.26.22 Tx DMA may halt while fetching TSO header under specific conditions . . . . . . . . . . . . . . 56
2.27 CEC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
2.27.1 Transmission blocked when transmitted start bit is corrupted . . . . . . . . . . . . . . . . . . . . . . 56
2.27.2 Missed CEC messages in normal receiving mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
2.27.3 Unexpected TXERR flag during a message transmission . . . . . . . . . . . . . . . . . . . . . . . . . 57
Important security notice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .58
Revision history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59