new cortex-m0 trainingno hardware divide no it ( if-then-else) blocks to avoid small branches all...

89
NEW Cortex-M0 Training 0

Upload: others

Post on 11-Dec-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

NEW

Cortex-M0 Training

0

Page 2: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Cortex-M processors Forget traditional 8/16/32-bit classifications

Seamless architecture across all applications

Every product optimised for ultra low power and ease of use

Cortex-M0 Cortex-M3 Cortex-M4

“8/16-bit” applications “16/32-bit” applications “32-bit/DSC” applications“8/16-bit” applications “16/32-bit” applications “32-bit/DSC” applications

Binary and tool compatible

Page 3: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Cortex M common features

Targeting the microcontroller applications

Very good power and area optimization

Designed for low cost and low power

Automatic state saving on interrupt and exceptions

Low software overhead on exception entry and exit Low software overhead on exception entry and exit

Deterministic instruction execution timing

Instructions always take same time to execute, from a deterministic memory system

Page 4: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Cortex-M feature set comparisonCortex-M0 Cortex-M3 Cortex-M4

Architecture Version V6M v7M v7ME

Instruction set architecture Thumb, Thumb-2 System Instructions

Thumb + Thumb-2 Thumb + Thumb-2,DSP, SIMD, FP

DMIPS/MHz 0.9 1.25 1.25

Bus interfaces 1 3 3

Integrated NVIC Yes Yes Yes

Number interrupts 1-32 + NMI 1-240 + NMI 1-240 + NMI

Interrupt priorities 4 8-256 8-256

Breakpoints, Watchpoints 4/2/0, 2/1/0 8/4/0, 2/1/0 8/4/0, 2/1/0

Memory Protection Unit (MPU) No Yes (Option) Yes (Option)

Integrated trace option (ETM) No Yes (Option) Yes (Option)

Fault Robust Interface No Yes (Option) No

Single Cycle Multiply Yes (Option) Yes Yes

Hardware Divide No Yes Yes

WIC Support Yes Yes Yes

Bit banding support No Yes Yes

Single cycle DSP/SIMD No No Yes

Floating point hardware No No Yes (Option)

Bus protocol AHB Lite AHB Lite, APB AHB Lite, APB

CMSIS Support Yes Yes Yes

Page 5: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Cortex-M processors binary compatible

Page 6: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Cortex-M – firmware compatibility(1/2)

Cortex M processors are FW and binary compatible Migrating path M0->M3->M4 is straight forward

Instruction set of Cortex-Mx is strictly included in the instruction set of Cortex-My (for x<y), allowing direct migration, while taking advantage of higher MCU clock speed and von Neumann to Harvard performance increase

Re-compilation of the code is recommended from Cortex-M0 to Cortex-M3, in order to fully take advantage of

the higher performance ISA (e.g. HW division) From M0/M3 to M4 w/ FPU, in order to generate the FPU code

For a given STM32 family, a full peripheral set compatibility is guaranteed in order to allow this simple migration path

Page 7: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Cortex-M – firmware compatibility(2/2)

Cortex M processors are FW and binary compatible When moving from M0/M3 to M4, some part of the code might be

re-coded using intrinsics, taking advantage of the advanced DSP/SIMD instructions

When moving backwards M3/M4 -> M0, the code needs to be recompiled in order to use only M0 instruction codes

Code density is equivalent on the different Cortex-M implementations Code size differences for usual codes are bellow few percents,

provided that the same optimizations options are chosen in the compiler

Page 8: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Cortex-M0 processor microarchitecure

ARMv6M Architecture Thumb-2 Technology Integrated configurable NVIC Compatible with Cortex-M3

Microarchitecture 3-stage pipeline with branch speculation 1x AHB-Lite Bus Interfaces 1x AHB-Lite Bus Interfaces

Configurable for ultra low power Deep Sleep Mode, Wakeup Interrupt Controller ( Not available for STM32F05)

Flexible configurations for wider applicability Configurable Interrupt Controller (1-32 Interrupts and Priorities) No Memory Protection Unit Optional Debug & Trace

Page 9: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

M0 – a low cost Cortex-M processor

Address “low end” applications, as a 8/16-bit MCU replacement Similar gate count to 16-bit processors For high end/processing intensive applications, the

global MCU price point is lower than most of 8/16-bit processors due to lower code memory footprint processors due to lower code memory footprint (similar, in a few percent range to the Cortex-M3)

High performance, only 25-30% lower than the standard Cortex-M3 32-bit architecture

Page 10: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Cortex M – code size advantage

Page 11: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Cortex-M3 is flagship MCU processor, offering higher performance

Delivers a performance efficiency advantage

Cortex-M0 better suited for simpler control and communications

Delivers an energy efficiency and cost advantage

Cortex-M0 complements Cortex-M3

CORTEX-M0 PERFORMANCECORTEX-M0 ENERGY EFFICIENCY

M3

Note: Energy efficiency ONLY refers to CPU consumption, similar energy at system level

Normalised Cortex-M3 performance and energy efficiency vs. Cortex-M0 for algorithm types. Energy efficiency based on Cortex-M3 and Cortex-M0 processor power estimates – ONLY reffers to CPU consumption, similar energy at system level

NO

RM

ALIS

ED

TO

CO

RTEX-M

3

Page 12: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Cortex-M0 differences vs Cortex-M3

V6M Architecture : Only 56 Instructions 46 instructions ( generally generated by a C compiler) 10 instructions for System & special usage Can run a Traditional ARM7/9 THUMB instructions 8/16/32-bits data transfers possible on One Instruction No Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches

All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions BL, DMB, DSB, ISB, MRS and MSR.

Load/Store instructions takes 2cycles each Most of MOV, ADD, SUBSRACT, Compare, Logical, SHIFT instructions take 1 cycle Branches takes from 1 to 4 cycles ( depends if conditional, not or with link) “MULS” instruction provides a 32-bit x 32-bit multiply that yields the least significant 32-bits :

1 cycle !

11

Page 13: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Cortex-M0 differences vs Cortex-M3

Less Breakpoints/Watchpoints (4/2) Only Serial-Wire-Debug (SWD) to save JTAG pins but on

same 20-pins connector Only one I/F ( AHB lite bus) to connect memories,

external bus Matrix, etc…. Cortex-M0 does not support different privilege levels, Cortex-M0 does not support different privilege levels,

Software execution is always privileged, meaning software can access all the features of the processor.

No Bit-Banding No support of un-aligned data

12

Page 14: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Simplified Register Set Very simple, linear 4GByte address space

Very compiler friendly

All registers are 32-bit wide Registers R0 –R7 (Low registers)

Registers R8 –R12 (High registers)

3 registers with special usage Stack Pointer (SP) –R13

Link Register (LR) –R14R8

R0

R1

R2

R3

R4

R5

R6

R7Link Register (LR) –R14

Program Counter (PC) –R15

Special-purpose register xPSR : Application and Exception Program status bits and flags

Vector Table contains Addresses

R8

R9

R10

R11

R12

R13(SP)

R14(LR)

R15 (PC)

xPSR

Page 15: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Exception/Interrupt Handling Very low latency interrupt processing

Interruptible LDM/STM for low interrupt latency ( Load/store multiples)

Automatic processor state save and restore

Provides low latency ISR entry and exit

Allows handler to be written entirely in ‘C’

The Cortex-M0 processor integrates an advanced Nest ed Vectored Interrupt Controller (NVIC)

The NVIC supports up to 32 dynamically reprioritizable interrupts each with up to The NVIC supports up to 32 dynamically reprioritizable interrupts each with up to ?16? levels of priority

Allows early processing of interrupts

Supports advanced features for next generation real-time applications

Tail-chaining of pending interrupts

Late-arrival interrupt handling and priority boosting / inversion

Exceptional Control Capabilities Through Integrated Interrupt Handling

Page 16: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Interrupt Handling Method

Interrupt handling is micro-coded. No instruction overhead

Entry

Processor state automatically saved to the stack over the bus. PC, xPSR, R0-R3, R12, LR

Then, ISR ready to start executing as soon as stack PUSH complete.

Late arriving interrupt will restart ISR fetching, but state saving does not need to be repeated.be repeated.

Exit

Processor state is automatically restored from the stack.

Then interrupted instruction is executed upon completion of stack POP.

Stack POP can be interrupted, allowing new ISR to be immediately executed without the overhead of state saving.

Page 17: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

PUSH POPISR 1 PUSH POP ISR 2

26 16 26 16

IRQ1

IRQ2

ARM7Interrupt handling in assembler code

42 CYCLES

Interrupt Response- Tail Chaining

Highest

Tail-chaining

PUSH ISR 1 POPISR 2

16

Cortex-M0Interrupt handling in HW

16

ARM7

• 26 cycles from IRQ1 to ISR1 entered•Up to 42 cycles if LSM

•42 cycles from ISR1 exit to ISR2 entry•16 cycles to return from ISR2

Cortex-M0

• 16 cycles from IRQ1 to ISR1 entered• ? cycles from ISR1 exit to ISR2 entry•16 cycles to return from ISR2

Page 18: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

ISR 2

Interrupt Response – Late Arriving

IRQ1

IRQ2

ISR 2ISR 1PUSH PUSH POP POP

PUSH POP

ARM7

Cortex-M0

Highest

26 161626

ISR 1 ISR 2

Tail-Chaining

PUSH POPCortex-M0

Cortex-M0

• Stack push to ISR 2 is interrupted• Stacking continues but new vector addressis fetched in parallel• ? cycles from late-arrival to ISR1 entry.• Tail-chain into ISR 2

ARM7

• 26 cycles to ISR2 entered• Immediately pre-empted by IRQ1 andtakes a further 26 cycles to enter ISR 1.• ISR 1 completes and then takes 16cycles to return to ISR 2.

16?

ISR 1

Page 19: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Cortex-M0 Exception TypesNo. Exception Type Priority

Type of Priority

Descriptions

1 Reset -3 (Highest) fixed Reset

2 NMI -2 fixed Non-Maskable Interrupt

3 Hard Fault -1 fixed Default fault if other hander not implemented

4-10 Reserved N.A. N.A.

11 SVCall Programmable settable System Service call

12-13 Reserved N.A. N.A.

14 PendSV Programmable settable Pendable request for System Device

15 SYSTICK Programmable settable System Tick Timer

16 Interrupt #0 Programmable settable External Interrupt #0

…… ………………….. ………………….. settable …………………..

47 Interrupt#31 Programmable settable External Interrupt #31

Page 20: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

INT mapping 1/2

Position Acronym Description

0 WWDG Window watchdog interrupt

1 PVD Power voltage detector interrupt (EXTI line 16)

2 RTC RTC interrupts (combined EXTI lines 17, 19 & 20)

3 FLASH Flash global interrupt

4 RCC RCC global interrupt

5 EXTI0_1 EXTI line 0 & 1 interrupt

6 EXTI2_3 EXTI line 2 & 3 interrupt

7 EXTI4_15 EXTI line 4 to 15 interrupt7 EXTI4_15 EXTI line 4 to 15 interrupt

8 RI Routing Interface (Touch-Sense controller) interrupt

9 DMA_Channel1 DMA channel 1 interrupt

10 DMA_Channel2_3 DMA channel 2 & 3 interrupts

11 DMA_Channel4_5 DMA channel 4 & 5 interrupts

12 ADC_COMP ADC and COMP interrupts (ADC combined with EXTI 21 & 22)

13 TIM1_BRK_UP_TRG_COM TIM1 break, update, trigger and commutation interrupts

14 TIM1_CC TIM1 Capture Compare interrupt

15 TIM2 TIM2 global interrupt

16 TIM3 TIM3 global interrupt

Page 21: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

INT mapping 2/2

Position Acronym Description

17 TIM6_DAC TIM6 global interrupt

18----------- >> Reserved for future extension (secondary DAC)

19 TIM14 TIM14 global interrupt

20 TIM15 TIM15 global interrupt

21 TIM16 TIM16 global interrupt

22TIM17 TIM17 global interrupt

23 I2C1 I2C1 global interrupt (combined with EXTI 23)23 I2C1

24 I2C2 I2C2 global interrupt

25 SPI1 SPI1 global interrupt

26 SPI2 SPI2 global interrupt

27 USART1 USART1 global interrupt (combined with EXTI 24)

28 USART2 USART2 global interrupt (combined with EXTI 25)

29 ----------- >> Reserved for future extension (USART3)

30CEC

CEC global interrupt (combined with EXTI 26)

31 ----------- >> Reserved for future extension (USB)

Page 22: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Vector Table

Vector Table starts at location 0

In the code section of the memory map

Vector Table contains addresses (vectors)

of exception handlers and ISRs

Not instructions

Table size (in words) is = number of IRQ inputs + 16

Minimum size ( case of 1 IRQ) : 17 words

Maximum size ( case of 32 IRQs) 48 words

Address Vector

0x00 Initial Main SP

0x04 Reset

0x08 NMI

0x0C Hard Fault

0x10-0x28 Reserved

0x2C SVCall

0x30-0x34 Reserved

Main stack pointer initial value in location 0

Set up by hardware during Reset

Vector Table can be relocated (to SRAM)

Software configurable through dedicated register in SCB

0x38 PendSV

0x3C Systick

40 IRQ0

… More IRQs

Page 23: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Power Management8bit Microcontroller like power mode management

SLEEP NOW

♦ “Wait for Interrupt” instructions to enter low power mode

No more dedicated control register settings sequence

♦ “Wait for Event” instructions to enter low power mode

No need of Interrupt to wake-up from sleep

Rapid resume from sleep

SLEEP on EXIT

♦ Sleep request done in interrupt routine

♦ Low power mode entered on interrupt return♦ Low power mode entered on interrupt return

Very fast wakeup time without context saving (6 cycles)

DEEP SLEEP

♦ Long duration sleep

From product side: PLL can be stopped or shuts down the power to digital parts of the system

Enables low power consumption

Page 24: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

System Timer (SysTick)

Flexible system timer

24-bit self-reloading down counter with end of count interrupt generation

2 configurable Clock sources

Suitable for Real Time OS or other scheduled tasks

Page 25: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Same as STM32L and STM32F2xx with some changes

GENERAL-PURPOSE I/Os

(GPIO)

System Peripherals

Page 26: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

GPIO features

Up to 55 multifunction bi-directional I/O ports available on biggest package 64 pin. ( 86% ratio versus 80% STM32F1 series)

Almost all standard I/Os are 5V tolerant (ADC pins are not)

All Standard I/Os are shared in 5 ports: GPIOA [0..15], GPIOB[0..15], GPIOC[0..15], GPIOD[0..2], GPIOF[4..7]

Atomic Bit Set and Bit Reset using BSRR and BRR registers Atomic Bit Set and Bit Reset using BSRR and BRR registers

GPIO connected to AHB bus: max toggling frequency 12 MHz

Configurable Output slew rate speed up to 50MHz

Locking mechanism (GPIOx_LCKR) provided to freeze the I/O configuration on ports A and B

Up to 55 GPIOs can be set-up as external interrupt (up to 16 lines at time) able to wake-up the MCU from low power modes

25

Page 27: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

GPIO Configuration Modes

To On-chip Peripherals

Analog

Pull -Up

VDD

On/Off

Inpu

t Dat

a R

egis

ter

Alternate Function Input

Schmitt

Trigger

0

Input Driver

Read

OnOff

VDD or VDD_FT(1)

MODER(i)[1:0]

OTYPER(i)[1:0]

I/O configurationPUPDR(i)[1:0]

01

0

0 0 Output Open Drain0 1 Output Open Drain with Pull-up1 0 Output Open Drain with Pull-down

1

0 0 Output Push Pull0 1 Output Push Pull with Pull-up1 0 Output Push Pull with Pull-down

0 0 Alternate Function Push Pull

(1) VDD_FT is a potential specific to five-volt tolerant I/Os and different from VDD.

From On-chip Peripherals

Push-PullOpen Drain Output

Driver

I/O p

in

VSS

On/Off

Pull

Pull -Down

Bit

Set

/Res

et

Reg

iste

r

Inpu

t Dat

a R

egis

ter

Out

put D

ata

Reg

iste

r

Read / Write

Alternate Function Output

VDD

VSS

Driver

Write

VSS

OUTPUT

CONTROL

Analog

11 x Analog modex

10

0

10 0 Alternate Function Open Drain0 1 Alternate Function OD Pull-up1 0 Alternate Function OD Pull-down

0 0 Alternate Function Push Pull0 1 Alternate Function PP Pull-up1 0 Alternate Function PP Pull-down

00 x0 0 Input floating0 1 Input with Pull-up1 0 Input with Pull-down

* In output mode, the I/O speed is configurable through OSPEEDR register: 2MHz, 10MHz or 50MHz

26

Page 28: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Alternate Functions features

Most of the peripherals shares the same pin (like USARTx_TX, TIMx_CH2, I2Cx_SCL, SPIx_MISO, EVENTOUT…)

Alternate functions multiplexers prevent to have several peripheral’s function pin to be connected to a specific I/O at a time. Available only for Port A and Port B

Some Alternate function pins are remapped to give the possibility to optimize the number of peripherals used in parallel.

AF0 (SPI1_MISO)

AF1 (TIM3_CH1)

AF2 (TIM1_BKIN)

AF7 (COMP1_OUT)

Pin x (0…7)

27

Page 29: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

I/O Port Logic Data Flow

Page 30: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Alternate Function IN / OUT selection

Page 31: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

PP_EN / DATA_OUT True Table

Page 32: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

I/Os special consideration

During and just after reset, the alternate functions are not active and the I/O ports are configured in input floating mode. But, the debug pins (SWD) are in AF pull-up/pull-down after reset: PA14: SWCLK in pull-down PA13: SWDAT in pull-up

Using the HSE or LSE oscillator pins as GPIOs When the HSE or LSE oscillator is switched OFF (default state after When the HSE or LSE oscillator is switched OFF (default state after

reset), the related oscillator pins can be used as normal GPIOs. When the oscillator is configured in a user external clock mode, only the

OSC_IN or OSC32_IN pin is reserved for clock input and the OSC_OUT or OSC32_OUT pin can still be used as normal GPIO.

Using the GPIO pins in the backup supply domain The PC13/PC14/PC15 GPIO functionality is lost when the device enters

Standby mode). In this case, if their GPIO configuration is not bypassed by the RTC configuration, these pins are set in an analog input mode.

31

Page 33: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Quiz

How many I/Os and ports there are in the STM32F0xx microcontroller ?____________

List all the I/O configuration modes____________

How many External interrupts and Wake-up pins, exist in the STM32F0xx microcontroller?________________________

32

Page 34: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Touch Sensing controller (TSC)

Application

Microcontroller Division

MMS Group

Page 35: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Charge Transfer Acquisition Sequence

S1

S2

S3S4

S5

S6

S4 closed for the whole acquisitionS5 & S6 opened for the whole acquisitionI/O

Cs

34

STEP S3 S2 S1 DESCRIPTION

1 Closed Opened Closed Cs discharge

2 Opened Opened Opened Deadtime

3 Opened Closed Opened Charge cycle (Cx charge)

4 Opened Opened Opened Deadtime

5 Opened Opened ClosedTransfer cycle (charge

transferred to Cs)

6 Opened Opened Opened Deadtime

7 Closed Opened Closed Cx discharge

Repeat until Vcs is read as a logical ‘1’

S5 & S6 opened for the whole acquisitionI/Oregister

Page 36: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Charge Transfer Acquisition Overview

Charge transfer uses the electrical properties of the capacitor charge Q

It uses a sampling capacitor (C S) in which the electrode (C x) charges are transferred to

Charge Transfer is performed through analog switches directly embedded into the GPIO

The charge transfer cycle is repeated N times until the voltage on the sampling capacitor reaches the VIH threshold of the GPIO it is connected to

The number N of transfer cycles required to reach the threshold represents the size of Cx

35

The number N of transfer cycles required to reach the threshold represents the size of Cx The number of transfer decreases when the electrode is touched.

VDD

Electrode capacitor charging

Charge transfer

Charge cycle

VIH

Page 37: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Charge Transfer Measuring Circuit

STM32F051

Rs

Rs

RsG1_IO1

G1_IO2

G1_IO3

Rs is used to improve ESD robustness (typically 10K) Cs sampling capacitor value depends on the required channels sensitivity

Higher Cs value is, higher the sensitivity but longer the acquisition time is

36

Sampling capacitor

Cs

Cx (~20pF)

G1_IO3

G1_IO4

Page 38: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

TSC Block Diagram

Clock prescaler

Pulse generator

Spread spectrum

I/O control logic

fHCLK

G1_IO1G1_IO2G1_IO3G1_IO4

SYNC

37

Group counters

Gx_IO1Gx_IO2Gx_IO3Gx_IO4

TSC_IOG1CR

TSC_IOG2CR

TSC_IOGxCR

Interrupt

Page 39: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

TSC Features (1/2)

Proven and robust surface charge transfer acquisition principle

One sampling capacitor for up to 3 capacitive sensi ng channels to reduce the system components

Supports up to 18 capacitive sensing channels split over 6 analog I/O groups

Up to 6 capacitive sensing channels can be acquired in pa rallel offering a very good response time 1 counter per analog I/O group to store the current acquisition result

Full hardware management of the charge transfer acquisition sequence No CPU load during acquisition

Spread spectrum feature to improve system robustness in noisy environments (minimum step of 20.8ns)

Page 40: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

TSC Features (2/2)

Programmable charge transfer frequency (up to 6.8 MHz)

Programmable sampling capacitor I/O pin and channel I/O pins Any GPIO of an analog IO group can be used for the sampling capacitor

Any GPIO of an analog IO group can be used for the channel

Programmable max count value to avoid long acquisition when a channel is faultyfaulty

Dedicated end of acquisition and max count error flags with i nterrupt capability

Compatible with proximity, touchkey, linear and rotary touch sensor implementation

Designed to operate with STMTouch touch sensing firmware library

Page 41: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

STMTouch Touch Sensing Library

Complete free C source code library with firmware examples

Multifunction capability to combine capacitive sensing functions with traditional MCU features

Enhanced processing features for optimized sensitivity and immunity Calibration, environment control system (ECS), debounce filtering , detection exclusion

system (DxS), etcsystem (DxS), etc

Complete and simple API for status reporting and application configuration

Touchkey, proximity, linear and rotary touch sensors support

Compliance with MISRA and with all STM32 C compilers

STM32F051 support planned for end Q2 2012

40

Page 42: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

GPIO Analog Switch and Hysteresis Control

In addition to the management of charge transfer acquisition, the Touch sensing controller provides a manual control of both the embedded analog switch and hysteresis of the GPIOs belonging to the analog I/O groups.

This could be useful to implement a different capacitive sensing acquisition principle of for others purpose (ie: analog multiplexer).

41

Page 43: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Quiz

How many channels are supported by STM32F0xx microcontroller ?____________

Could you briefly describe the charge transfer acquisition principle?____________

What is the impact of a touch on the number of charge transfer cycles?____________

What type of sensors are supported by the STMTouch touch sensing library ?____________

Page 44: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Similar set as STM32F100x

functionality like STM32F2x

TIMERS (TIM)Standard Peripherals

Page 45: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Timers overview

TimerWidth

&Direction

CAPCOM+

COMPL.

Prescaler&

Max clock

DMA features

Synch. Module

External trigger

BreakRepetition

counter

TIM116bit

UP/DOWN4 + 3 All Yes Yes Yes Yes

TIM232bit

UP/DOWN4 + 0 All Yes Yes No No

TIM316bit

UP/DOWN4 + 0 All Yes Yes No No

Linear16-bit

48 MHz

TIM616bit

UP only0

1 DMA req.

Yes No No No

TIM1416bit

UP only1 + 0 No No Yes

LSENo No

TIM1516bit

UP only2 + 1 All Yes No Yes Yes

TIM1616bit

UP only1 + 1 All No No Yes Yes

TIM1716bit

UP only1 + 1 All No No Yes Yes

Page 46: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Timers features

Timer interconnections:Slavetimer ITR0 ITR1 ITR2 ITR3

TIM1 TIM15 TRGO TIM2 TRGO TIM3 TRGO TIM17 OC

TIM2 TIM1 TRGO TIM15 TRGO TIM3 TRGO TIM14 OC

TIM3 TIM1 TRGO TIM2 TRGO TIM15 TRGO TIM14 OC

TIM15 TIM2 TRGO TIM3 TRGO TIM16 OC TIM17 OC

BREAK inputs: TIM1: COMP1, COMP2, Hard Fault, RAM parity, PVD, CSS, BKIN TIM15, TIM16, TIM17: Hard Fault, RAM parity, PVD, CSS, BKIN

TIM15 TIM2 TRGO TIM3 TRGO TIM16 OC TIM17 OC

Page 47: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

IR transmitter

Page 48: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Quiz How many 32-bit timers are embedded in STM32F05x?

____________

What are the possible break inputs except the TIMx_BKIN ?____________

Which timers are used for IR transmitter ?____________

47

Page 49: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Same as STM32F-1New IP comingfrom STM32F-2

SERIAL PERIPHERAL

INTERFACE (SPI/I2S)

Communication Peripherals

Page 50: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

SPI Mode

Page 51: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

SPI Features (1/2)

Full duplex synchronous transfers (3 lines)

Half duplex/Simplex synchronous transfers (2 lines, bi-

directional data line at half duplex)

Programmable clock polarity & phase, data MSB/LSB first

Master/multi Master/Slave operation

Dynamic software/hardware NSS management (Master/Slave)

Up to 18 MHz

bit rate

Dynamic software/hardware NSS management (Master/Slave)

Hardware CRC feature (8-bit & 16-bit data frames checking)

Flags with IT capability (TxE, RxNE, MODF, OVR, CRCERR)

Programmable bit rate: up to fPCLK/2

BSY flag (ongoing communication check)

DMA capability (separated Rx/Tx channels,

automatic CRC & Tx/Rx access/threshold handling)

50

Page 52: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

SPI Features (2/2)

New enhanced NSS control:

NSS pulse mode (NSSP)

NEW!

NSS pulse mode (NSSP)

TI mode

Programmable data frame from 4-bit to 16-bit

Two 32-bit Tx/Rx FIFO buffers with DMA capability

Data packed mode control

(I2S mode)

51

Page 53: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

SPI block scheme

(SD)

(MCLK)

52

(CK)

(WS)

Page 54: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Data Frame Format (Motorola mode)

Data frame format :

Programmable size of transfer data frame format from 4-bit up to 16-bit

Programmable clock polarity & phase, data bit order MSB/LSB first

53

Page 55: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

NSS management

NSS input – SSM selects HW control (NSS pin) or SW control (SSI bit):

Slave mode - select slave for communication(optionally can be used for synchronization of a transaction begin)

Master mode - signalize conflict between masters

NSS output – HW control at master mode only(SSM=0, SSOE=1 or at specific modes - TI, NSSP)

54

Page 56: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Communication modes 1/3

Full Duplex mode (Single master & single slave)

Three lines are necessary at least - MISO, MOSI, SCK (NSS is optional)

55

Master Slave

NSS HW management

NSS SW management

Page 57: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Communication modes 2/3

Simplex mode (Single master & single slave)

Two lines are necessary at least (NSS is optional):

MISO & SCK (Master Rx only, Slave Tx only)

MOSI & SCK (Master Tx only, Slave Rx only - at below figure)

!

56

SlaveMaster

!

Page 58: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Communication modes 3/3

Half duplex mode (Single master & single slave)

Two lines are necessary at least - bidirectional cross data line MOSI-MISO and SCK (NSS is optional)

57

Master Slave

Page 59: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Multi slave system (duplex/simplex)

Separated NSSsAt full duplex one slave only can communicate with master (is selected by NSS) at time

Common NSS

Slave

!

!

Common NSSSlaves at simplexRx only mode can receive the same data sent in parallel from master

MISO pin can’t be used at this case

58

Slave

Master

!

Page 60: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Multi slave circular duplex chain

Data lines are connected into a closed loop

Master must shift the data through all the data through all of the slaves

One common NSS is used

59

Page 61: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

32-bit Rx and Tx FIFOs

Two separated 32-bit FIFOs for receive and transmission

8-bit or 16-bit read/write access to FIFOs.

Occupancy level flagsFTLVL[1:0], FRLVL[1:0], TxE, RxNE

Different capability of Tx and Rx FIFOs

60

Page 62: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Packed mode & FIFOs access

When data frame fits into one byte (from 4 up to 8 bits) two patterns can be accessed in parallel by single write/read FIFOs.

Example: 4-bit data frame length, MSB first, 16-bit threshold is set for RxFIFO,

both FIFOs can be accessed by single 16-bit read or write 1x TxE event at transmitter - 1x RxNE event at receiver

61

Page 63: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

DMA

DMA handles automatically: all the TXE and RXNE events CRC is sent after last data frame Initialization of CRC calculation change of data register access and Rx threshold control of the last

data frame in case it is an odd frame at packed mode(user must set LDMA_TX & LDMA_RX bits at this case!) (user must set LDMA_TX & LDMA_RX bits at this case!)

Packed mode is used by DMA: data frame fits into one byte when peripheral size (PSIZE) is set to 16-bit for SPI DMA channel

Note: OVR flag is set at transmit only modeBSY & FTLVL must be checked when SPI is disabled

62

Page 64: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

BSY flag

For communication activity control(to prevent corruption of ongoing transfer) Before SPI or its clock are disabled (at some modes) Before entry to Halt

Cleared under any one of the following conditions: When the SPI is properly disabled When the SPI is properly disabled When a master mode fault occurs (MODF=1) In master mode between transactions when no next pattern is

ready to transfer (FTLVL=00) In slave mode between each data pattern transfer

Note: BSY & FTLVL must be checked before SPI is disabled

63

Page 65: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

CRC Calculation (1/3)

Hardware CRC feature for reliable communication:

Separated CRC calculators implemented for transmitted and

received data

CRC value is transmitted as a last transaction(s)

CRC error checking for last received byte and interrupt generation CRC error checking for last received byte and interrupt generation

on error

Programmable CRC polynomial calculation (odd polynomials only)

For 8-bit or 16-bit data patterns only

Two possible CRC calculations: CRC8, CRC16-CCITT standard

64

Page 66: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

CRC Calculation (2/3)

MOSIMOSI

Example of n data transfer between two SPIs followed by the CRC transmission of each one in Full-duplex mode

SPI_TXCRCR and SPI_RXCRCR – separated registers for CRC calculation

Transmitter – puts calculated Data 2 … Data n CRC[1..n]Data 1

SCKSCK

MISOMISO

CRC value into TxFIFO

Receiver - compares last frame(s)

at RxFIFO with calculated CRCData’ 2 … Data’ n CRC’[1..n]Data’ 1

65

NSSNSS

CRCNXT=1

CRCERR interrupt

Page 67: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

CRC Calculation (3/3)

Basic SD/MMC support (SPI protocol):

Performance: speed up to 18MHz

Error checking: hardware CRC calculationVDD

R =

4.7

VDD

Master

SCK

MISO

CS

R =

4.7

K

MOSI9

1 2

3 4

5 6

7 8

66

Page 68: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

NSS enhanced modes (1/2)

Pulse mode (NSSP=1) At master and Motorola mode with CPHA=0 only NSS output is managed by HW

67

Page 69: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

NSS enhanced modes (2/2)

TI mode (FRF=1) Clock and NSS are managed by HW At slave, baud rate setting defines trelease (MISOs HiZ) Format frame error interrupt (FRE)

68

Page 70: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Be careful!

When data packed mode is used Keep Rx threshold & read access of Rx FIFO always in line (8-bit/16-bit) Change Rx threshold just before last odd data frame is received

When go to Halt or when disable the SPI check read FIFO occupancy and bus activity (FxLVL[1:0] = 00 & BSY = 0)

When communication is continuous (e.g. master Rx-only) Perform Rx threshold, change/CRC control or Stop at “Control window” Perform Rx threshold, change/CRC control or Stop at “Control window”

When CRC is enabled at slave CRC clock input is sensitive for SCK signal even in case SPIE=0

69

Control window

Dummy/Odd/CRC Frame

CRCNXT=1RXONLY=0FRXTH=1

CPHA=0

Page 71: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Quiz

What is a maximum SPI speed?

When data packed mode is used?

What should be in line when access the RxFIFO?

Does a master take any care of the NSS signal level if it is managed by SW?

How many bytes (maximum) can be stored into TxFIFO till it is full when 8-bit access is used?

What should precede before SPI is disabled?

70

Page 72: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

NEW

INTER-INTEGRATED CIRCUIT

INTERFACE (I2C)

Communication Peripherals

Page 73: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

I2C Features (1/2)

I2C specification rev03 compatibility

SMBus 2.0 HW support

PMBus 1.1 Compatibility

Multi Master and slave capability

Controls all I²C bus specific sequencing, protocol, arbitration and timing Controls all I²C bus specific sequencing, protocol, arbitration and timing

Standard, fast and fast mode + I²C mode (up to 1MHz )

20mA output drive capability for FM+ mode

72

Page 74: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

I2C Features (2/2)

7-bit and 10-bit addressing modes

Multiple 7-bit Addressing Capability with configurable mask

Programmable setup and hold time

Easy to use event management

Programmable analog and digital noise filter

Wakeup from STOP mode on address match Wakeup from STOP mode on address match

Optional clock stretching

Independent clock

1-byte buffer with DMA capability

73

Page 75: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

I2C Implementation

I2C1 supports all features

I2C2 supports a smaller set of features

I2C features I2C1 I2C2

Independent clock YES NO

SMBUS HW support YES NO

74

Wakeup from STOP YES NO

20mA output drive YES NO

Page 76: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

I2C1 Block Diagram

I2C1SYSCLK

RCC_CFGR3 / I2C1SW

Digital Noise Filter

Digital Noise

AnalogNoise Filter

AnalogNoise

SCLClockControl

GPIOlogic

SYSCFG_CFGR1 / I2C_PBx_FM+

HSI I2C_CLK

75

RegistersPCLK

APB bus

Noise Filter

Noise Filter

SMBA

DataControl

GPIO logic SDA

SYSCFG_CFGR1 / I2C_PBx_FM+

Page 77: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

I2C SDA and SCL noise filter

Analog noise filter in SDA and SCL I/O Can filter spikes with a length up to 50ns This filter can be enabled or disabled by SW (enabled by default)

Digital noise filter for SDA and SCL Suppress spikes with a programmable length from 0 to 15 I2C_CLK

periods .

76

Only analog filter can be enabled when Wakeup from STOP feature is enable.

Filters configuration must be programmed when the I2C is disable.

Page 78: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

I2C Programmable timings Setup and Hold timings between SDA and SCL in transmission are

programmable by SW with PRESC, SDADEL and SCLDEL fields in I2C Timing Register (I2Cx_TIMINGR). SDADEL is used to generate Data Hold time. TSDADEL = SDADEL * (PRESC+1) * TI2C_CLK

SCLDEL is used to generate Data Setup time. TSCLDEL = (SCLDEL+1) * (PRESC+1) * TI2C_CLK

Example Data Hold Time :

SCLSDADEL

Th(SDA) Data hold time

77

The Setup and Hold configuration must be programmed when the I2C is disable. I2C_Timing_Config_Tool is available in FWLib to calculate I2C_TIMINGR value

for your application.

SCL falling edge internal detection

SDA

TSYNC1

Page 79: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

I2C Master clock generation SCL Low and High duration are programmable by SW with PRESC, SCLL and

SCLH fields in I2C Timing Register (I2Cx_TIMINGR). SCL Low counter is (SCLL+1) * (PRESC+1) * TI2C_CLK. . It starts counting after SCL falling edge

internal detection. After counting, SCL is released. SCL High counter is (SCLH+1) * (PRESC+1) * TI2C_CLK . It starts counting after SCL rising edge

internal detection. After counting SCL is driven low.

The total SCL period is : TSYNC1 + TSYNC2 + [(SCLL+1) + (SCLH+1)] * (PRESC+1) * TI2C_CLK

SCL Period : TSYNC2

78

SCL Period :

The SCLL and SCLH configuration must be programmed when the I2C is disable. I2C_Timing_Config_Tool is available in FWLib to calculate I2C_TIMINGR value

for your application.

SCL

SCL falling edge internal detection

SDA

SCLL

TSYNC1

TSYNC2

SCLH

Page 80: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Slave Addressing Mode

I2C can acknowledge several slave addresses. 2 address registers :

I2Cx_OAR1 : 7-bit or 10-bit mode.

I2Cx_OAR2 : 7-bit mode only. OA2MSK[2:0] allow to mask from 0 to 7

LSB of OAR2 :

OA2MSK[2:0] Address match condition

79

000 address[7:1] = OA1[7:1]

001 address[7:2] = OA1[7:2] (Bit 1 is don’t care)

010 address[7:3] = OA1[7:3] (Bit 2:1 are don’t care)

...

111 All addresses are acknowledged except I2C reserved addresses.

Page 81: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Wakeup from STOP on address match

When I2C_CLK clock is HSI, the I2C is able to wakeup MCU from STOP when

it receives its slave address. All addressing mode are supported.

During STOP mode and no address reception : HSI is switched off.

On START detection, I2C enables HSI, used for address reception.

Wakeup from STOP is enabled by setting WUPEN in I2C1_CR1.

Clock stretching must be enabled to ensure proper operation: NOSTRETCH=0.

80

Page 82: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

I2C events

Interrupt event Interrupt flag

Receive Buffer Not Empty RXNE

Transmit buffer Interrupt Status TXIS

Stop detection interrupt flag STOPF

Transfer Complete Reload TCR

81

Transfer Complete Reload TCR

Transfer Complete TC

Address matched ADDR

NACK reception NACKF

Page 83: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Easy Master mode management

For payload <= 255 bytes : only 1 write action needed !! (apart data rd/wr)I2Cx_CR2 is written w/ :

AUTOEND

START=1 SADD : slave address RD_WRN : transfer direction NBYTES = N : number of bytes to be transferred AUTOEND =1 : STOP automatically sent after N data.

Data transfer managed by Interrupts (TXIS / RXNE) or DMA

82

AUTOEND

0 : Software end mode End of transfer SW control after NBYTES data transfer : • TC flag is set. Interrupt if TCIE=1.• TC is cleared when START or STOP is set by SW

If START=1 : RESTART condition is sent

1 : Automatic end mode STOP condition sent after NBYTES data transfer

Page 84: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Easy to use event management

For payload > 255 : in addition, RELOAD must be set in I2Cx_CR2.

RELOAD

0 : No reload NBYTES data transfer is followed by STOP or ReSTART

1 : Reload mode NBYTES is reloaded after NBYTES data transfer (data transfer will continue) :

AUTOEND = 0 has no effect when RELOAD is set

83

transfer will continue) : • TCR flag is set. Interrupt if TCIE=1.• TCR is cleared when I2Cx_CR2 is written w/ NBYTES≠0

Page 85: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Slave mode

By default : I2C slave uses clock stretching . This can be disabled by setting NOSTRETCH=1

Reception : Acknowledge control can be done on selected bytes in Slave Byte Control (SBC) mode with RELOAD=1 SBC = 1 enables the NBYTES counter in slave mode (Tx and Rx modes). SBC = 1 is allowed only when NOSTRETCH=0.

84

SBC

0 : Slave Byte Control disable

All received bytes are acknowledged.

1 : Slave Byte Control enable

If RELOAD=1, after NBYTES data are transferred :• TCR set & SCL stretched before ACK pulse in reception.• TCR is cleared when I2Cx_CR2 is written w/ NBYTES≠0

if I2Cx_CR2/NACK = 1: received byte is NOT Acknowledged

Page 86: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

SMBUS

SMBus 2.0 Compatibility

ARP (Address resolution protocol) support :

Device default address Arbitration in slave mode

Host Notify protocol support : host address

Alert support : Alert pin and Alert Response support Alert support : Alert pin and Alert Response support

Configurable Timeout detection

Clock low timeout Cumulative clock low extend time

Configurable bus idle detection

Command and data acknowledge control in SBC mode

PEC HW calculation

85

Page 87: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

SMBUS : PEC (Packet Error Checking)

HW PEC calculation is enabled when PECEN=1 is I2C1_CR1.

NBYTES (data transfer counter) is used to :

automatically check PEC in reception, after NBYTES-1 are received.

Automatic NACK sending in case of failure

automatically send PEC in transmission, after NBYTES-1 are sent. automatically send PEC in transmission, after NBYTES-1 are sent.

Therefore SBC must be set in Slave mode to enable NBYTES counter

Automatic PEC sending/checking is done when PECBYTE=1 in I2C1_CR2.

86

Page 88: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Error conditions

Interrupt event Interrupt flag

Bus error detection BERR

Arbitration Loss ARLO

Over-run / Under-run error OVR

SMBUS : PEC error PECERR

87

SMBUS : PEC error PECERR

SMBUS : Timeout error TIMEOUT

SMBUS : Alert pin detection ALERT

Page 89: NEW Cortex-M0 TrainingNo Hardware Divide No IT ( If-Then-Else) blocks to avoid small Branches All instructions are 16-bits Thumb to save code memory, except the 32-bit Thumb instructions

Quiz How many I2C are in the STM32F0xx microcontroller ?

____________

What are the different I2C modes supported by the I2C1 and I2C2?____________

What is the SW sequence to read 3 data from slave address 0xAA in master mode?master mode?____________

What are the error flags of the I2C?____________

88