Семейство MSP430FR57xx : MSP430 с встроенной FRAM Сравнение с семейством Wolverine MSP430FR59xx
Семейство MSP430FR57xx : MSP430 с встроенной FRAM
Сравнение с семейством Wolverine MSP430FR59xx
Содержание� Введение во FRAM
� FR57xx: Обзор архитектуры, ядра, периферии
‒ Лаб1: Измерение потребления MSPFR5739 в активном режиме
� Использование FRAM на FR57xx
‒ Лаб2: Использование MPU (модуля защиты памяти)
‒ Лаб3: A) Размещение глобальных переменных во FRAM
B) Автоматическое выделение границ сегментов через
командный файл линковщика
� Примеры использования периферийных модулей FR57xx в сравнении с FR59xx
‒ Лаб4: ADC10_B, сравнение с Wolverine
‒ Лаб5: BLINK LED (програмное моргание светодиодом)
‒ Лаб5a: BLINK LED (моргание светодиодом с помощью Tamer0)
Свойства технологии FRAMFRAM:• Энергонезависимость
• Is truly random access, not segmented
• Малое энергопотребление и высокая скорость во время записи
• Не нужна раскачка для записи(1,5В запись)
3
• Не нужна раскачка для записи(1,5В запись)
• Высокая надёжность (10^15 циклов записи стирания)
• Повышенная надёжность целостности данных
Все преимущества FRAM
FRAM SRAM EEPROM Flash
Энергонезависимость
Скорость записи
Приведено для13kB блоков
Ток потребления в active mode
Да Да ДаНет
10мс 2сек<10мс 1 сек
50мA+<60100 230active mode[мкA/MГц]
Циклов перезаписи (надёжность)
Побитная запись
Унифицированнаяпамять (данные/программа)
50мA+<60100 230
10,000100,000∞10^15
ДаДа НетНет
Да НетНетНет
Данные для встроенных типов памяти в МК
Сравнение LPM и времени просыпания
Параметр F2xx F5xx FR57xx
LPM0-LPM4 Да Да Да
LPMx.5 Нет Да Да
tWAKEUP-LPM0 1мкс 6мкс 1мкс
FR59xx
Да
Да
1мксtWAKEUP-LPM0 1мкс 6мкс 1мкс
tWAKEUP-LPM1,2 1мкс 6мкс 11мкс
tWAKEUP-LPM3,4 1мкс6мкс/150мк
с100мкс
tWAKEUP-LPMX.5 Н/Д 2000мкс 575мкс
6мкс
<7мкс
<200мкс
Содержание� Введение во FRAM
� FR57xx: Обзор архитектуры, ядра, периферии
‒ Лаб1: Измерение потребления MSPFR5739 в активном режиме
� Использование FRAM на FR57xx
‒ Лаб2: Использование MPU (модуля защиты памяти)
‒ Лаб3: A) Размещение глобальных переменных во FRAM‒ Лаб3: A) Размещение глобальных переменных во FRAM
B) Автоматическое выделение границ сегментов через
командный файл линковщика
� Примеры использования периферийных модулей FR57xx в сравнении с FR59xx
‒ Лаб4: ADC10_B, сравнение с Wolverine
‒ Лаб5: BLINK LED (програмное моргание светодиодом)
‒ Лаб5a: BLINK LED (моргание светодиодом с помощью Tamer0)
Первый LP FRAM МК – MSP430FR5739
• Производительность
– До 24МГц(Доступ к FRAM @ 8МГц)
• Потребление
‒ Активный режим:100 мкA/МГц @ 8MГц
‒ Режим RTC (LPM3.5): ~1.5 мкA
‒ Режим Standby (LPM3): < 7 мкA
‒ Режим Shutdown(LPM4.5): ~0.3 мкA
Power & Clocking
Микроконтроллер MSP430FR57xx
Memory
16KB / 8KB / 4KB FRAM(with segment protections
for code/data)
Debug
Real-time JTAG
Boot Strap Loader
Embedded Emulation
• Power on Reset• Brownout Reset• Low Power
Vreg(1.5V)• XT1, VLO• DCO • Real Time Clock
Timers
16-bit RISCMCU
Up to 24 MHz
Peripherals
1KB / 0.5KB RAM
Low Power
‒ Режим Shutdown(LPM4.5): ~0.3 мкA
• Гибкая универсальная память
‒ 16/8/4 KB FRAM с разделением на память данных/память программ
• Корпуса
‒ 24/40-Pin QFN, 28, 38-Pin TSSOP
‒ Темп. диап. -40ºC to 85ºC
DMA (3ch)
32 x 32 Multiplier
Serial Interface
ADC10 (up to 12ch)
Analog
Timers
TimerA0 (3)
TimerA1 (3)
Watch Dog Timer
PortsUp to 3 [1x8 ] + 1 [1x2 ] I/O Ports w/ interrupt/ wake-up
CRC16
3 x eUSCIUniversal Serial Comm. Interfaces
TimerB0 (3)
Comparator / REF
TimerB1 (3)
TimerB2 (3)
Peripherals
Второе поколение семейство Wolvorine MSP430FR5969
• Performance
– Up to 16MHz (FRAM access @ 8MHz)
• Power Numbers
– Active Mode: 100 µA/MHz avg.@ 8MHz
– RTC mode (LPM3.5): <0.5 µA
– Standby Mode (LPM3): <1 µA
– Shutdown Mode (LPM4.5): 100 nA
• Flexible Unified Memory
Power & Clocking
MSP430FR59xx Microcontroller
Memory
64KB FRAM/2KB RAM(with segment protections
for code/data)
Debug
Real-time JTAG
Boot Strap Loader
Embedded Emulation
• Power on Reset• Brownout Reset• XT1, XT2,VLO• DCO • Real Time Clock
Timers
16-bit RISCMCU
Up to 16 MHz
Peripherals
8
• Flexible Unified Memory
– 64/48/32 KB FRAM versions with program code / data memory partitioning
• Package
– 48/40-Pin QFN, 38-Pin TSSOP
– Temp Range -40ºC to 85ºC
DMA (3ch)
32 x 32 Multiplier
Serial Interface
ADC12 (up to 32c h)
Analog
Timers
TimerA0 (3)
TimerA1 (3)
Watch Dog Timer
PortsUp to 4 [P1-P4] I/O Ports w/
interrupt wake-up
CRC16
eUSCIUniversal Serial Comm. Interfaces
TimerA2 (2)
Comparator / REF
TimerA3 (2)
TimerB0 (7)
Peripherals
Блок-схема MSP430FR5739
Блок-схема MSP430FR5969
Управление питанием и напряжение ядраМодуль PMM MSP430FR57xx / MSP430FR59xx
� Что такое VCORE?‒ Интегрированный LDO обеспечивает стабилизированное напряжение‒ VCORE питает цифровую часть (ядро, память, цифровые модули)
� Есть ли какие либо отличия от семейства F5xx?‒ Да, у FR57xx только один уровень напряжения ядра [1.5В]
• Чем отличаются Wolverine ?– FR59xx только один уровень напряжения ядра[1.2В]– FR59xx не требуется внешний VCORE конденсатор
� Рекомендации для FR57xx ?‒ 470нФ конденсатор необходим на пин VCORE
‒ НЕ питать пин VCORE внешним напряжением!‒ НЕ присоединять пин VCORE к другим выводам!
DVCC
2 – 3.6VVCORE1.5V
LDO
Ref.BrownoutSVSH SVSL
REGULATOR
1.8 – 3.6VDVCC
1.2VVCORE
Супервизор питания (SVS)
‒ Супервизор питания сильно упрощен в сравнении с
семейством F5xx
‒ Для FR57xx раздельный контроль за высоким (DVcc ) / низким
(ядро) напряжениями
‒ Для FR59xx слежение только за DVcc, SVSL (слежение за
Vccore) не нужно
‒ Предустановленные пороговые значения
‒ Сброс устройства через слежение за SVSH
Для FR57xx
‒ SVSH
– Активен в AР & LPM0 & LPM1 & LPM2 & LPM3 & LPM4 & LPM3.5 (не
отключается)отключается)
– Не активен в LPM4.5
‒ SVSL
– Активен в AР & LPM0 (не отключается)
– Может быть отключен в LPM1 & 2(вкл. по ум-ю)
– Не активен в LPM3 & LPM4 & LPM3.5 & LPM4.5
Для FR59xx
‒ SVSHE = 0
– Активен в AР, LPM0, LPM1
– Не активен в LPM2, LPM3, LPM4, LPM3.5, LPM4.5
‒ SVSHE = 1
– Всегда включен
Работа PMM при старте
• До пяти независимых источников
– Низкая частототные:
• LFXT1 32768 Гц
• VLO 10 кГц
• LFMODCLK MODCLK/128
– Высокая частотные
• XT1 4 – 24 МГц кристалл
• XT2 4 – 24 МГц кристалл
• DCO Откалиброванный диапазон
• MODCLK Внутренний 5МГц
Тактирование (CS)
• MODCLK Внутренний 5МГц
• Частота DCO по умолчанию = 1MHz
• ACLK = Только LF источники
• MODOSC тактирование ADC12
• Защита от сбоев
– XT1LF: LFMODCLK (~42kHz)
– XT1HF or XT2: MODCLK (5MHz)
DCO: Программируемый цифровой осциллятор
‒ 6 возможных частот
‒ Откалиброван на заводе:
Точность +2% в диапазоне 0-50C
Точность+3.5% в диапазоне от -40 до 85C
*
Выбор частоты DCO
Диапазон высоких частот приведен только для семейства FR573x
DCO: Программируемый цифровой осциллятор
• Multiple frequency settings
• Заводская калибровка
Точность +2% при 0-50C
Точность +3.5% при -40 -85C
• DCOCLK = 20, 24МГц
тактировать MCLK только
после делителя
DCORSEL DCOFSEL DCO Freq.
MHz
0/1 000 1
0 001 2.667
0 010 3.333
0 011 4
0/1 100/001 5.330/1 100/001 5.33
0/1 101/010 6.67
0/1 110/011 8
1 100 16
1 101 20*
1 110 24*
Диапазон высоких частот приведен только для семейства FR59xx
Режимы работы
• Active Mode – 100 µA/MHz!– CPU active
– Fast Peripherals Enabled
– 32 kHz Peripherals Enabled - RTC
• LPM0 – 40 µA– CPU disabled, Fast Peripherals Enabled
– Fast Wake up
– HF clock sources available
• LPM3 – 1.2 µA (typical)– CPU disabled, Fast Peripherals Disabled
– 32 kHz Peripherals Enabled– 32 kHz Peripherals Enabled• RTC, Watchdog & SVS protection
• LPM4 – 0.7 µA– All clocks disabled
– Wake on interrupt from port
• LPM3.5 – 0.36 µA– Regulator & all system clocks disabled except for
RTC (32768Hz LFXT)
– Complete FRAM retention
– BOR on nRST/NMI or Port I/O or RTC
• LPM4.5 – 0.1 µA– With SVS enabled
– With SVS disabled – 10nA
Контроллер FRAM (FRCTL)
Функции FRCTL:
‒ Обеспечивает чтение и запись
во FRAM подобно обычной RAM
памяти
‒ Чтение/Запись на частоте < 8MHz
‒ Для частот MCLK > 8MHz
задействуются циклы ожидания
o Автоматически или
принудительнопринудительно
‒ Контроллер содержит кэш
‒ Проверка и исправление ошибок
(ECC) в каждом цикле
чтения/записи
Встроенный кэш
‒ Встроенный сдвоенный кэш на 4 слова, невидимый для программиста, всегда активен
‒ Кэш помогает:
o Уменьшить потребление за счет использования SRAM
o Увеличить пропускную способность на частотах выше 8МГц
o Увеличить надежность, особенно при частых обращений во FRAM, например, для циклов (JMP$)
Active Power Vs MCLK
0
0,5
1
1,5
2
2,5
3
3,5
4
1 4 8 16 20 24MCLK (MHz)
Act
ive
Po
wer
(m
A) RAM / 100% Cache Hit
75% Cache Hit
Typical/ 66% Cache Hit
50% Cache Hit
0% Cache Hit
So far we’ve covered…
• FRAM Technology Attributes
• Introduction to the MSP430FR59xx Family
• FR59xx CPU, Operating Modes & Wake up times
• Core Module Overview– PMM
– SVS
19
– SVS
– CS, DCO
– FRCTL
– Impact of Cache in the systemNow we are ready for a lab!
Содержание� Введение во FRAM
� FR57xx: Обзор архитектуры, ядра, периферии
‒ Лаб1: Измерение потребления MSPFR5739 в активном режиме
� Использование FRAM на FR57xx
‒ Лаб2: Использование MPU (модуля защиты памяти)
‒ Лаб3: A) Размещение глобальных переменных во FRAM‒ Лаб3: A) Размещение глобальных переменных во FRAM
B) Автоматическое выделение границ сегментов через
командный файл линковщика
� Примеры использования периферийных модулей FR57xx в сравнении с FR59xx
‒ Лаб4: ADC10_B, сравнение с Wolverine
‒ Лаб5: BLINK LED (програмное моргание светодиодом)
‒ Лаб5a: BLINK LED (моргание светодиодом с помощью Tamer0)
Лабораторная 1
• Цели:
• 1) Знакомство с MSP-EXP430FR5739
• 2) Измерение потребления в активном режиме при • 2) Измерение потребления в активном режиме при различных частотах MCLK
• 3) Влияние кэша на потребление в активном режиме
Начало работы с MSP430FR5739
‒ Отладочная плата MSP-EXP430FR5739
‒ $40 (В Компэл)
‒ Встроенный эмулятор
‒ Особенности• 3-х осевой акселерометр
• Термистор NTC
• 8 светодиодов
• Посадочное место для LDR - датчика
• 2 кнопки• 2 кнопки
‒ Быстрое знакомство• Загруженный демо софт
• 4 режима для теста особенностей FRAM:
o Mode 1 – максимальная скорость записи во FRAM
o Mode 2 - эмуляция записи во флэш
o Mode 3 – запись во FRAM данных акселерометра
o Mode 4 – запись во FRAM данных с термистора
Разъем USB Интерфейс отладки и программирования
Акселерометр
NTC Термистор
LED0 – LED8
MSP430 UART
MSP-EXP430FR5739
Акселерометр
MSP430FR5739
Кнопки S1,S2
Кнопка сброса
Разъем для EXP-MSP430F5438
Разъем для плат CCxx
Конфигурирование проекта в CCS
‒ Открыть CCS V5.1
‒ Выбрать C:\FR57x\LabWorkspace в качестве рабочего пространства
C:\FR57x\LabWorkspace
Конфигурирование проекта в CCS
• Импортировать 3 проекта ‘Lab1’ ‘Lab2’ ‘Lab3’ ‘Lab4’ ‘Lab5’ из ‘C:\FR57x\LabSourceProjects’
‒ ‘Project’ � ‘Import existing CCS/CCE Eclipse Project’
‒ Выставить ‘Copy projects into workspace’
• Убедиться что Lab1 активен [Active-Debug]
• Если нет, кликнуть правой кнопкой на Lab1 и выбрать ‘Set as Active Project’
Потребление в цикле while(1); / JMP$
LAB1A
‒ Lab1.c содержит код, инициализирующий плату и
включает светодиоды
‒ Убедитесь ,что цикл while(1); включен в main()
‒ Откомпилируйте и загрузите код [Target � Debug Active
Project]Project]
‒ Запустите код [Target � Run]
‒ Остановите отладку [Target � Terminate All]
‒ Нажмите кнопку ‘RESET’
Получаем значение тока…
LAB1A: Измерения
‒ Измерьте ток через джампер VCC
‒ MCLK = DCO = 8МГц; Показания мультиметра <600µA
или ~75µA/ МГц
Результат:
‒ Короткий цикл (JMP$) � код выполняется полностью
из кэша (SRAM)из кэша (SRAM)
‒ Поэтому столь низкое потребление!
Подсоедините мультиметр через Vcc
Использовать USB для питания
Более реалистичный вариант
LAB1B
‒ Функция Active_mode_test() это комбинация доступа из RAM, FRAM + различные режимы адресации
‒ Ближе к условиям реального кода
‒ Используйте эту функцию для измерения ‘реального’ потребления
‒ Закомментируйте цикл while(1);
‒ Включите в проект вызов ACTIVE_MODE_TEST()‒ Включите в проект вызов ACTIVE_MODE_TEST()
‒ Пересоберите проект
‒ Загрузите и запустите код на выполнение, остановите отладку
Не забудьте вставить джампер на питание для программирования!
Исходный код
Убедитесь, что данная функция вызывается
Измерения…
LAB1B: Наблюдения
‒ MCLK = DCO = 8MHz
‒ Показания прибора <800мкА или 100мкA/МГц
Результаты:
‒ Потребление растет с ростом прямых обращений Потребление растет с ростом прямых обращений
(мимо кэша)
‒ Соотношение попаданий/промахов кэш зависит от
кода
‒ Чем проще и короче циклы – тем больше попаданий
Зависимость потребления от частоты
LAB1C
‒ Измерение потребления при различных тактовых частотах
‒ Используйте MCLK = 16MHz и MCLK = 24MHz
‒ Установите значения регистров CSCTL1 � DCORSEL, DCOFSELx в соответствии с таблицей
‒ Загрузите код
Зависимость потребления от частоты
LAB1C: Наблюдения
‒ Убедитесь что частота выросла по ускоренному
миганию светодиодов при включении
‒ Потр. мощность @ 16 МГц <1.3мA or ~81мкA/МГц
‒ Потр. мощность @ 24 МГц < 1.8мA or ~75мкA/МГц
Итоги:Итоги:
� Влияния кэша на потребление в активном режиме
� Измерение потребляемой мощности на 8MГц
� Установка DCO на 16МГц 24МГц
� Сравнение потребления для 8,16, 24МГц
Содержание� Введение во FRAM
� FR57xx: Обзор архитектуры, ядра, периферии
‒ Лаб1: Измерение потребления MSPFR5739 в активном режиме
� Использование FRAM на FR57xx
‒ Лаб2: Использование MPU (модуля защиты памяти)
‒ Лаб3: A) Размещение глобальных переменных во FRAM
B) Автоматическое выделение границ сегментов через
командный файл линковщика
� Примеры использования периферийных модулей FR57xx в сравнении с FR59xx
‒ Лаб4: BLINK LED (програмное моргание светодиодом)
‒ Лаб4a: BLINK LED (моргание светодиодом с помощью Tamer0)
Унифицированная память
Один МК поддерживает различные конфигурации
В ряде случаев требуются разные МК
Без FRAM С FRAM
Зачастую
16kB Flash (Program)
2kB SRAM 64kB Universal FRAM
Разделение между областями данных и
‒ Проще логистика
‒ Более быстрая модификация изделий
Чтобы получить больше SRAM нужно купить больше FLASH ROM
1kB EEPROM
Зачастую нужен другой
МК 14kB Flash2kB
SRAM
24kB Flash5kB
SRAM
Разделение между областями данных и программ по желанию
Модуль защиты памяти (MPU)
‒ Во FRAM память очень просто записать…
‒ По этому память данных и память программ должны быть защищены
‒ MPU защищает от случайных модификаций [разрешения только на
чтение, запись и выполнение]
‒ Особенности:
• Память разделена на три изменяемых • Память разделена на три изменяемых
по размеру сегмента
• Независимые права доступа к
каждому сегменту
• Регистры MPU защищены паролем
Расчет границ сегментов
‒ Размер сегмента определяется регистром
MPUSB (Segment Borders)
‒ Всего 5 бит
� 32 сегмента
‒ Минимальный размер сегмента:
4k :4 * 1024 / 32 = 128 байт
8k :8 * 1024 / 32 = 256 байт
16k :16 * 1024 / 32 = 512 байт
Разбивка на сегменты за 4 шага
Сегмент 1 = 0xC200 to 0xCDFF
Сегмент 2 = 0xCE00 to 0xD7FF
Сегмент 3 = 0xD800 to 0xFFFF
Шаг 1: Определение границ сегментов
Шаг 2: Поиск значений регистра MPUSBx в MSP430FR57xx Family User’s Guide стр.240 (Пример для 16k памяти)
MPUSBx[4:0] Page_start Address
0x01 0xC200
….. 0xCxxx
0x07 0xCE00
… 0xCxxx
0x0C 0xD800
Family User’s Guide стр.240 (Пример для 16k памяти)
B1
B2
Разбивка на сегменты за 4 шага
Шаг 3: Запись значений в регистр MPUSEG
0x0C
Разбивка на сегменты за 4 шага
MPUSEGxXE MPUSEGxWE MPUSEGxRE Выполнение Запись Чтение
0 0 0 нет нет нет
Шаг4: Установка прав доступа для каждого сегмента
0 0 0 нет нет нет
0 0 1 нет нет да
0 1 1 нет да да
1 0 1 да нет да
1 1 1 да да да
Содержание� Введение во FRAM
� FR57xx: Обзор архитектуры, ядра, периферии
‒ Лаб1: Измерение потребления MSPFR5739 в активном режиме
� Использование FRAM на FR57xx
‒ Лаб2: Использование MPU (модуля защиты памяти)
‒ Лаб3: A) Размещение глобальных переменных во FRAM‒ Лаб3: A) Размещение глобальных переменных во FRAM
B) Автоматическое выделение границ сегментов через
командный файл линковщика
� Примеры использования периферийных модулей FR57xx в сравнении с FR59xx
‒ Лаб4: ADC10_B, сравнение с Wolverine
‒ Лаб5: BLINK LED (програмное моргание светодиодом)
‒ Лаб5a: BLINK LED (моргание светодиодом с помощью Tamer0)
Лабораторная 2
• Цели:
• 1) Изучение регистров MPU
• 2) Установка границ сегментов с помощью документации• 2) Установка границ сегментов с помощью документации
• 3)Установка прав доступа
Конфигурирование MPU
Лаб 2
1. Сделать проект Lab2 активным
2. Ознакомиться с регистрами MPU в User’s Guide C:\FR57xx\Documents\MSP430FR5xx User's Guide (slau272)
3. Заполнить пустые места в lab2.c в соответствии с условиями:
• Разрешить доступ к регистру MPU
• Установить границы сегментов в 0xC800 и 0xD000
• Запретить доступ на запись для Сегмента 2
• Разрешить прерывания для Сегмента 2 при нарушении прав доступа
4. Собрать проект Lab2
5. Загрузить и запустить код
6. LED5 должен мигать
void main(void){
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P3OUT &= ~BIT4; P3DIR |= BIT4; // Configure P3.4 for LEDP3OUT |= BIT4;__delay_cycles(100000);P3OUT &= ~BIT4;__delay_cycles(100000);
// Configure MPUMPUCTL0 = MPUPW; // Write PWD to access MPU registersMPUSEG = 0x0804; // B1 = 0xC800: 04h; B2 = 0xD000: 08h
// Borders are assigned to segments
Пример кода
1. Установить пароль
2. Установить границы сегментов
// Borders are assigned to segmentsMPUSAM &= ~MPUSEG2WE; // Segment 2 is protected from writeMPUSAM |= MPUSEG2VS; // Violation select on write access
MPUCTL0 = MPUPW+MPUENA+MPUSEGIE+MPULOCK; // Enable NMI & MPU protection// MPU registers locked until BOR
Data = 0x88;// Cause an MPU violation by writing to any address in segment 2
ptr = (unsigned int *) 0xC802; *ptr = Data;
while(1); }
}
3. Защитить Сегмент2 от записи
4. Сконфигурировать PUC при нарушении доступа
5. Добавить запись в защищенную область
Конфигурирование MPU
LAB2 Наблюдения:
‒ MPU играет важную роль в защите памяти данных и памяти программ
‒ MPU может сгенерировать RESET (PUC)при попытке доступа в защищенную область
итоги:
� Получены сведения о регистре MPU
� Установлены границы сегментов� Установлены границы сегментов
� Настроены индивидуальные права доступа к сегментам
� Для каждого сегмента установлено действие на нарушение прав доступа
Содержание� Введение во FRAM
� FR57xx: Обзор архитектуры, ядра, периферии
‒ Лаб1: Измерение потребления MSPFR5739 в активном режиме
� Использование FRAM на FR57xx
‒ Лаб2: Использование MPU (модуля защиты памяти)
‒ Лаб3: A) Размещение глобальных переменных во FRAM‒ Лаб3: A) Размещение глобальных переменных во FRAM
B) Автоматическое выделение границ сегментов через
командный файл линковщика
� Примеры использования периферийных модулей FR57xx в сравнении с FR59xx
‒ Лаб4: ADC10_B, сравнение с Wolverine
‒ Лаб5: A) BLINK LED (програмное моргание светодиодом)
B) BLINK LED (моргание светодиодом с помощью Tamer0)
Лабораторная 3• Цели:
1) Изучение командного файла линковщика
2) Размещение глобальных переменных в FRAM
3) Автоматическое назначение Границ Сегментов и Привилегий Сегментов используя командный файл линковщикалинковщика
Компиляция с установками линковщика по
умолчанию
LAB3A
1. Сделайте Lab 3 активным проектом
2. Осуществите сборку проекта Lab3 с установками линковщика по
умолчанию
3. Загрузите и запустите на выполнение код примера
4. Вы можете менять количество зажженных светодиодов кнопкой 4. Вы можете менять количество зажженных светодиодов кнопкой
S1
5. Отключите питание и подайте снова;
-> Установки зажженных светодиодов сбросились потомучто
переменная ‘SwitchCounter1’ хранилась в RAM
Как сделать чтобы переменная ‘SwitchCounter1’ сохранялась во
FRAM?
Настройка Памяти Данных
и Программ
• Проанализируйте файл линковщика для этого МК в CCS5.1
• Откройте файл lnk_msp430fr5739.cmd из проекта Lab3
• Изучите строки файла lab3.map (находится в папке Debug) отвечающие за использование RAM/FRAM
Настройка Памяти Данных
и Программ• В IAR и CCS5.1по умолчанию все глобальные переменные
размещаются в SRAM
– Плюсы: часть глобальных переменных должна быть энергонезависима например машинные состояния, часто вызываемы переменные к которым необходим частый доступ в этом случае не уменьшают пропускную способность, уменьшение потребления
– Минусы: Пользователю необходимо описывать сегменты для хранения переменных в FRAMхранения переменных в FRAM
• В CCS4 все глобальные переменные размещаются во FRAM
– Плюсы: Все переменные энергонезависимы, не требуется дополнительных действий для сохранения необходимых переменных
– Минусы: Увеличивается размер кода , повышается потребление, уменьшается пропускная способность на частотах MCLK > 8MГц
• Комментарии приветствуются ! [email protected]
CCS5.1 Расположение секций в памяти
Директива
Pragma SET_DATA_SECTION
• Использоваться для описания секций ниже дериктивы
pragma. Синтаксис директивы выглядит в C/C++ так :
#pragma SET_DATA_SECTION ("section name" )
• Для описания секции по умолчанию компилятора
необходимо оставить пустое поле в директиве.
Пример:Пример:
Код C:
#pragma SET_DATA_SECTION("mydata") int x;int y;#pragma SET_DATA_SECTION()
Файл Линковщика:
SECTIONS{
mydata : {} > FRAM…
Перенос глобальных
переменных во FRAMLAB3B
1. Сделайте Lab 3 активным проектом
2. Переместите глобальную переменную
‘SwitchCounter1’ во FRAM используя директиву pragma
SET_DATA_SECTION
3. Измените файл Линковщика соответствующим
образомобразом
4. Загрузите и запустите на выполнение код примера
5. Вы можете менять количество зажженных
светодиодов кнопкой S1
6. Отключите питание и подайте снова;
-> Установки зажженных светодиодов сохранились потому что
переменная ‘SwitchCounter1’ хранилась во FRAM
Скриншот исходного кода
Lab3.c:
• Файл
1. Создание новой секциилинковщика
2. Сброс текущей секции
3. Добавление новой секции_msp430fr5739.cmd
Содержание� Введение во FRAM
� FR57xx: Обзор архитектуры, ядра, периферии
‒ Лаб1: Измерение потребления MSPFR5739 в активном режиме
� Использование FRAM на FR57xx
‒ Лаб2: Использование MPU (модуля защиты памяти)
‒ Лаб3: A) Размещение глобальных переменных во FRAM‒ Лаб3: A) Размещение глобальных переменных во FRAM
B) Автоматическое выделение границ сегментов через командный файл линковщика
� Примеры использования периферийных модулей FR57xx в сравнении с FR59xx
‒ Лаб4: ADC10_B, сравнение с Wolverine
‒ Лаб5: A) BLINK LED (програмное моргание светодиодом)
B) BLINK LED (моргание светодиодом с помощью Tamer0)
Конфигурирование MPU
используя Линковщик• Линковщик отвечает за инициализацию Модуля Защиты Памяти
• Линковщик использует подпрограмму начальной загрузки, которая выполняет инициализацию MPU на основе определения последовательности символов.
• TI предоставляет командный файл линковщика который содержит начальные определения для автоматической инициализации Модуля Защиты Памяти (MPU). Секциям Программ и Данных автоматически присваиваются корректные права доступа.
• Если вам необходимо настроить собственную инициализацию MPU вы • Если вам необходимо настроить собственную инициализацию MPU вы можете изменить определения __mpuseg и __mpusam в командном файле линковщика.
• Специальная подпрограмма начальной загрузки MPU используется, когда эти два символа определены, и она устанавливает значение MPUSEG и регистров MPUSAM на основе этих значений.
Настройка MPU с
помощью Линковщика
• Специализированный загрузчик процедуры инициализации MPU
использует определенные с помощью директив __mpuseg и
__mpusam значения MPUSEG и MPUSAM.
Настройка MPU с
помощью Линковщика
LAB3C
1. Сделайте Lab 3 активным проектом
2. Настройте MPU используя командный файл линковщика Linker
Command File: Uncomment the ‘MPU SPECIFIC MEMORY SEGMENT
DEFINITONS’
3. Осуществите сборку проекта Lab3 с использованием
редактированного командного файла линковщика редактированного командного файла линковщика
4. Загрузите и запустите на выполнение код примера
5. Проверьте состояние регистров MPU в отладчике (Debugger)
Настройка MPU с помощью Линковщика/****************************************************************************//* MPU SPECIFIC MEMORY SEGMENT DEFINITONS *//****************************************************************************/
mpusb1 = (fram_ro_start + 0x4000 - 0xFFFF - 1) * 32 / 0x4000 - 1;mpusb2 = (fram_rx_start + 0x4000 - 0xFFFF - 1) * 32 / 0x4000 - 1;__mpuseg = (mpusb2 << 8) | mpusb1;__mpusam = 0x7516;
Settings after MPU-specific boot routine execution:Default Settings:
Содержание� Введение во FRAM
� FR57xx: Обзор архитектуры, ядра, периферии
‒ Лаб1: Измерение потребления MSPFR5739 в активном режиме
� Использование FRAM на FR57xx
‒ Лаб2: Использование MPU (модуля защиты памяти)
‒ Лаб3: A) Размещение глобальных переменных во FRAM‒ Лаб3: A) Размещение глобальных переменных во FRAM
B) Автоматическое выделение границ сегментов через командный файл линковщика
� Примеры использования периферийных модулей FR57xx в сравнении с FR59xx
‒ Лаб4: ADC10_B, сравнение с Wolverine
‒ Лаб5: A) BLINK LED (програмное моргание светодиодом)
B) BLINK LED (моргание светодиодом с помощью Tamer0)
ADC10_B
Feature Enhancements
• Significant power savings
– 150µA Vs 1.2mA on F2xx
• Up to 200ksps
• REF – unique module
– 1.5V, 2V and 2.5V
• DTC replaced by DMA
• Up to 12 external input channels
60
• Up to 12 external input channels
• Window Comparator
– Hi, low and middle interrupts
ADC12B
• Upto 200ksps
• SNR >64dB; ENOB 11 bits w/ external reference
• INL <= +/- 1.7 LSB; DNL <= +/- 1 LSB
• Window comparator for all channel results, shared high and low threshold between all channels
• Differential or single-ended Inputs – user selectable
• Extend to 32-input channels
– separate internal channels for AVcc and TempSensor and 4 for future use
– Added 16 ADC12MCTL registers– Added 16 ADC12MCTL registers
– Added 16 ADC12MEMx registers
• Ultra Low current consumption
– Single ended typical 63uA @ 1.8V, 200ksps
– Differential typical 95uA @ 1.8V, 200ksps
Содержание� Введение во FRAM
� FR57xx: Обзор архитектуры, ядра, периферии
‒ Лаб1: Измерение потребления MSPFR5739 в активном режиме
� Использование FRAM на FR57xx
‒ Лаб2: Использование MPU (модуля защиты памяти)
‒ Лаб3: A) Размещение глобальных переменных во FRAM‒ Лаб3: A) Размещение глобальных переменных во FRAM
B) Автоматическое выделение границ сегментов через командный файл линковщика
� Примеры использования периферийных модулей FR57xx в сравнении с FR59xx
‒ Лаб4: ADC10_B, сравнение с Wolverine
‒ Лаб5: A) BLINK LED (програмное моргание светодиодом)
B) BLINK LED (моргание светодиодом с помощью Tamer0)
Скриншот исходного кода
Family User’s Guide стр.255 Стр.412
1. Включить модуль ADC10ON, установитьS&H=16 тактов
2. Тактирование от MODOSC и режим S&H в sample timer режиме
3. 10 бит результат
4. Отцифровывать вход A1, Vref=AVCC
5. Разрешить прерывание по завершению
63
5. Разрешить прерывание по завершению преобразования
Содержание� Введение во FRAM
� FR57xx: Обзор архитектуры, ядра, периферии
‒ Лаб1: Измерение потребления MSPFR5739 в активном режиме
� Использование FRAM на FR57xx
‒ Лаб2: Использование MPU (модуля защиты памяти)
‒ Лаб3: A) Размещение глобальных переменных во FRAM‒ Лаб3: A) Размещение глобальных переменных во FRAM
B) Автоматическое выделение границ сегментов через командный файл линковщика
� Примеры использования периферийных модулей FR57xx в сравнении с FR59xx
‒ Лаб4: ADC10_B, сравнение с Wolverine
‒ Лаб5: A) BLINK LED (програмное моргание светодиодом)
B) BLINK LED (моргание светодиодом с помощью Tamer0)
Скриншот исходного кода
1. Разрешение прерывания таймера TA02. Тактирование от SMCLK и повторяющийся
счёт вверх
3. Выбор вектора прерывания
65
3. Выбор вектора прерывания
4. Переключение состояния 4го бита порта 3
JTAG and BSL
JTAG• Security can be achieved by:
• Fuse is in software
1) JTAG lock and unlock
- Access granted only if tool chain supplies correct password
2) JTAG fuse blow
BSL• Similar to F5xx BSL but
• Code in Boot ROM – cannot be modified
• Peripheral Interface: HW UART
• BSL Entry and signature same as F5xx
66
2) JTAG fuse blow
- Access only via BSL if password is know
- JTAG can be re-enabled via BSL
3) JTAG fuse blow + BSL disable
- No further access to device is possible
Итоги
FRAM работает! Первые в мире молопотребляющие
контроллеры с FRAM у Texas Instruments.
• 3 главных преимущества FRAM:
– Ультра быстрая запись
– Ультра низкое потребление
– Супер надёжность
• FR5739: Надёжное семейство микроконтроллеров • FR5739: Надёжное семейство микроконтроллеров
улучшенное за счёт установленного FRAM
• Протестируйте наши ДЕМКИ!
Backup
• Use Case Example: MSP430F2274 vs MSP430FR5739
• Both devices use System clock = 8MHz
• Maximum Speed FRAM = 1.4Mbps [100x faster]
• Maximum Speed Flash = 13kBps
FRAM = Ultra -fast Writes
1,400kBps
Max. Throughput:
13kBps
• Use Case Example: MSP430F2274 vs MSP430FR5739
• Both devices write to NV memory @ 13kBps
• FRAM remains in standby for 99% of the time
• Power savings: >200x of flash
FRAM = Low active write duty cycle
Consumption @ 13kBps:2,200µA
9µA
• Use Case Example: MSP430F2274 vs MSP430FR5739
• Average power FRAM = 720µA @ 1.5Mbps
• Average power Flash = 2200 µA @ 12kBps
• 100 times faster in half the power
• Enables more unique energy sources
FRAM = Ultra-low Power
• FRAM = Non-blocking writes • CPU is not held
• Interrupts allowed
• Пример: MSP430F2274 против MSP430FR5739
• Надёжность FRAM >= 100 Трилионов [10^14]
• Надёжность Flash < 100,000 [10^5]
• Сравнение: запись в блок памияти 512 байт на скорости12кБ в
сек.
• Flash = 6 минут
FRAM = Высокая надёжность
• Flash = 6 минут
• FRAM = 100+ лет!114,000лет
6.6мин[мин]
FRAM – ведение журнала данных в реальном
времени!• Системы Реального Времени при работе с Flash
– Стирание и запись блоков занимает существенное процессорное
время
– CPU не отвечает на внешние события
– Решения для MSP430 :
• Перенос Таблицы Векторов Прерывания и подпрограмм прерываний в
RAM
• Прерывание может дождаться завершения стирания Flash
• Прерывание может остановить запись во Flash• Прерывание может остановить запись во Flash
– Усложнить ПО для обхода возникновения таких ситуаций
• Системы Реального Времени при работе с FRAM
– Запись в FRAM не блокирует CPU
– Любые прерывания могут быть обработаны в реальном времени
– Ни каких специальных программных сложностей не нужно