Русский
Русский
English
Статистика
Реклама

Rtc

Recovery mode Особенности RTC M41T56

01.08.2020 12:08:37 | Автор: admin

M41T56 это микросхема Real Time Clock, являющаяся аналогом популярной DS1307. И хотя даже цоколевка микросхем совпадает, у них есть существенные отличия, о которых я постараюсь рассказать.




Краткое описание



Я не буду останавливаться на работе шины IIC, отмечу только что обе микросхемы имеет адрес 0xd0. Для работы с временем микросхемы содержат семь регистров счета и регистр управления. Регистры счета содержат числа в двоично-десятичном формате, однако некоторые биты имеют особое значение.



Регистры
xxx значение бита не определено.
функция индекс биты возможные значения
7 6 5 4 3 2 1 0
секунды 0x00 ST десятки секунд единицы секунд 0 59
минуты 0x01 xxx десятки минут единицы минут 0 59
часы 0x02 SEB SB десятки часов единицы часов 0 23
день 0x03 xxx xxx xxx xxx xxx день недели 1 7
день месяца 0x04 xxx xxx десятки дня единицы дня 1 (28|29|30|31)
месяц 0x05 xxx xxx xxx дес единицы месяца 1 12
год 0x06 десятки года единицы года 0 99
регистр управления 0x07 OUT FT S величина коррекции -


Биты
x после включения состояние бита может быть любым.
бит после сброса описание
ST x При записи 1 в этот бит генератор останавливается
CEB x Когда бит CEB (Century Enable Bit) установлен, то при достижении нового века бит CB (Century Bit) поменяет значение на противоположное.
CB x
OUT 1 Когда биты OUT (OUTput level) и FT (Frequency Test) равны нулю, вывод FT/OUT прижимается к земле. При FT=1 на выводе FT/OUT 512 Гц и бит OUT не имеет значения.
FT 0
S x Знак калибровки хода RTC.


Различия начинаются в назначении битов 7, 6 и 5 регистра часов. В M41T56 биты 7 и 6 используются для индикации перехода в новое столетие, а биты 5 и 4 используются для счета десятков часов. Причем счет часов возможен только в режиме 24, режим AM/PM недоступен. В DS1307 бит 7 не используется, ноль в бите 6 указывает, что используется режим счета 24 и этом случае биты 5 и 4 содержат десятки часов. Если в бите 6 единица, то бит 5 становится флагом AM/PM, а бит 4 содержит десятки часов.



Существенные отличия есть в регистре управления, которой содержит слово коррекции хода.



Коррекция хода



M41T56 позволяет компенсировать погрешность кварцевого резонатора в диапазоне от -62 до +124 ppm, что дает отклонение не более чем 5 секунд за месяц. За компенсацию отвечают шесть младших битов управляющего регистра. Биты 4-0 содержат целое число без знака величины коррекции, а бит 5 задает направление коррекции. Если бит 5 содержит ноль, то ход замедляется с шагом 2.034 ppm, в противном случае RTC ускоряется с шагом 4.068 ppm. Это неудобно, поэтому я набросал пару простых функций для преобразования из ppm в слово коррекции и обратно.



/* Маска для получения только значения калибровки без знака. */#define MASK_CALIBER      ((1<<4) | (1<<3) | (1<<2) | (1<<1) | (1<<0))/* Маска для получения только значения калибровки без знака. */#define MASK_CALIBER_SIGN (1 << 5)/** * Получение значения коррекции хода. * @param caliber Калибровочное слово из RTC. * @return Коррекция хода в ppm. */int8_t caliber_to_ppm(uint8_t caliber){        int8_t result = caliber & MASK_CALIBER;        result = (uint8_t) result * 2;        if ((caliber & MASK_CALIBER_SIGN) != 0) {                result = -result;        } else {                result = (uint8_t) result * 2;        }        return result;}/** * Получение калибровочного слова. * @param ppm Коррекция хода в ppm. * @return Калибровочное слово для RTC. */uint8_t ppm_to_caliber(int8_t ppm){        uint8_t result;        if (ppm < 0) {                result = (uint8_t) (-ppm + 1) / 2;                result |= MASK_CALIBER_SIGN;        } else {                result = (uint8_t) (ppm + 2) / 4;        }        return result;}


Детектирование сбоев



Ни DS1307, но M41T56 не умеют детектировать сбои генерации, но гарантируют, что при включении питания некоторые биты будут в определенном состоянии. M41T56 при включении в управляющем регистре будет 10xxxxxx. Для отслеживания сбоев в программе можно придерживаться следующего алгоритма. Если при включении микроконтроллера регистр управления RTC содержит 10xxxxxx, значит был сбой питания и в регистр нужно записать значение, старшие биты которого не равны 10. Самое простое записать слово коррекции с битами 7 и 6 равными нулю.



Литература



  • Справочный листок M41T56
  • Справочный листок DS1307
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru