PIClist RUS
микроконтроллеры PIC и интерфейсы
техническая документация
статьи и разработки на русском языке

Список ошибок в микроконтроллерах PIC24HJXXXGPX06/X08/X10 Rev. A2

« назад на главную страницу

Оригинал: "PIC24HJXXXGPX06/X08/X10 Rev. A2 Silicon Errata"

Перевод с английского © piclist.ru по заказу chip-nn.ru


Полученные вами устройства PIC24H (Rev. A2) соответствуют техническим характеристикам и функциональным возможностям, описанным в следующих документах:

1) "Техническое описание на семейство микроконтроллеров PIC24H" ("PIC24H Family Data Sheet" - DS70175);

2) "Справочное руководство по программированию устройств dsPIC30F/33F" ("dsPIC30F/33F Programmer's Reference Manual" - DS70157);

3) "Справочное руководство по семейству микроконтроллеров dsPIC30F" ("dsPIC30F Family Reference Manual" - DS70046).

Отличия от технических характеристик, опубликованных в этих документах, приведены в данной статье. Устройства, для которых приводятся эти отличия:
» PIC24HJ64GP206
» PIC24HJ64GP210
» PIC24HJ64GP506
» PIC24HJ64GP510
» PIC24HJ128GP206
» PIC24HJ128GP210
» PIC24HJ128GP306
» PIC24HJ128GP310
» PIC24HJ128GP506
» PIC24HJ128GP510
» PIC24HJ256GP206
» PIC24HJ256GP210
» PIC24HJ256GP610

Идентифицировать чип можно, выполнив операцию "Reset and Connect" с помощью MPLAB® ICD 2 с MPLAB IDE v7.40 или более поздних версий. В окне вывода "Output" появится информация об успешном подключении к устройству, указанному в меню "Настройка"->"Выбор устройства" ("Configure">"Select Device").

Проблемы, приведённые в данном документе, будут исправлены в будущих ревизиях чипа.

Краткое изложение списка ошибок

Ниже приводится краткая информация об ошибках, более подробную информацию вы сможете найти далее в этом документе:

1) Режим дозирования (Doze).
Если включен режим дозирования, любая запись в регистр общего назначения (SFR) периферийных модулей может привести к тому, что последующие попытки изменения этого регистра будут блокироваться на время текущего тактового цикла ЦПУ.

2) Модуль 12-разрядного АЦП (ADC).
Для данной ревизии чипа параметры 12-разрядного АЦП INL, DNL и время захвата сигнала не соответствуют техническим характеристикам, опубликованным в техническом описании на устройство.

3) Модуль 10-разрядного АЦП.
Для данной ревизии чипа, параметры 10-разрядного АЦП DNL, скорость преобразования и время захвата сигнала не соответствуют техническим характеристикам, опубликованным в техническом описании на устройство.

4) Взаимодействие модуля DMA с командой EXCH.
Команда EXCH выполняется некорректно, если значение одного из операндов равно адресу любого из регистров специального назначения DMAC.

5) Команда DISI.
Команда DISI не отключает прерывания, если она исполняется в том же цикле команд, в котором счётчик DISI уменьшается до нуля.

6) Выход модуля компаратора.
Выход модуля компаратора выдаёт на выходе всплеск (glitch), если вывод ввода/вывода (I/O) изначально установлен в высокий уровень, а модуль настроен на выдачу на вывод низкого уровня в заданное время.

7) Выход модуля компаратора в режиме ШИМ.
Выход модуля компаратора пропускает одно событие сравнения, если значение регистра рабочего цикла ШИМ изменилось с 0x0000 на 0x0001.

8) Модуль SPI в режиме ведущего с возможностью кадрового обмена (Frame Master).
Если FRMDLY = 1, то модуль SPI не будет генерировать импульсы синхронизации кадра.

9) Модуль SPI в режиме выбора ведомого.
В этом режиме модуль SPI функционирует некорректно.

10) Модуль SPI.
Бит SMP не имеет никакого эффекта, если модуль SPI настроен на режим ведомого со значением предделителя 1:1.

11) Модуль ECAN.
Передачи ECAN могут оказаться некорректными, если несколько передающих буферов одновременно становятся в очередь на передачу.

12) Модуль ECAN.
При определённых условиях первые пять битов передаваемого идентификатора могут не соответствовать значению, находящемуся в регистрах идентификатора передающего буфера.

13) Модуль ECAN в режиме петли.
В этом режиме модуль ECAN (ECAN1 или ECAN2) функционирует некорректно.

14) Модуль I2C.
Бит обнаружения коллизии на шине не устанавливается, если коллизия на шине возникает во время событий RESTART и STOP.

15) INT0, АЦП и режим Sleep/Idle.
Триггеры событий АЦП с вывода INT0 не пробуждают устройство из режимов Sleep или Idle, если значение битов SMPI отлично от нуля.

16) Режим дозирования и исключения.
Исключения по ошибке декодирования адреса, ошибке стека, математической ошибке и ошибке DMA не пробуждают устройство из режима дозирования.

17) JTAG-программирование.
Не работает.

18) UART.
При включенной проверке чётности может возникнуть ошибка чётности, если генератор скорости передачи (BRG) содержит нечётное значение.

19) UART.
Бит обнаружения ошибки переполнения приёмного буфера может установиться до того, как FIFO-буфер модуля переполнится.

20) UART.
Принимаемые данные могут оказаться повреждёнными, если BRG настроен на режим 4x.

21) UART.
Бит UTXISEL0 всегда читается как ноль.

22) UART.
Функция автоподстройки скорости может вычислять скорость некорректно, если BRG настроен на режим 4x.

23) UART.
Если включена функция автоподстройки скорости, символ прерывания синхронизации (Sync Break) (0x55) может попасть в FIFO-буфер в качестве данных.

24) Модуль ECAN.
Буферы 6 и 7 периодически могут передавать неправильный тип сообщения.

25) Модуль I2C.
Коллизия записи не предотвращает запись в передающий регистр.

26) Модуль I2C.
Бит ACKSTAT отражает принимаемое условие ACK/NACK только для передачи в режиме ведущего, но не для передачи в режиме ведомого.

27) Модуль I2C.
Бит состояния D_A не устанавливается при записи в передающий регистр в режиме ведомого.

28) Исключения и режим Idle.
При сбое тактового генератора, если устройство находится в режиме Idle, исключение по сбою генератора не перейдёт на подпрограмму обработки исключений.

29) Пробуждение из режима Sleep по MCLR.
При пробуждении из режима Sleep по MCLR ожидание включения встроенного регулятора напряжения не выполняется.

30) Модуль ECAN.
Регистры C1RXOVF2 и C2RXOVF2 всегда читаются как 0x0000.

31) FRC-генератор.
Параметры точности внутреннего FRC не соответствуют техническим характеристикам, опубликованным в техническом описании.

32) SPI.
Функция SPI1 для вывода 34 (U1RX/SDI1/RF2) ошибочно включается модулем SPI2.

33) UART.
Функция автоподстройки скорости неточно измеряет скорость для некоторых комбинаций скоростей передачи и тактовых частот.

34) Регистр идентификатора устройства.
Содержимое регистра идентификатора устройства отличается от запрограммированного на заводе.

35) Модуль DMA.
Передачи данных DMA, которые активны в режиме однократного запуска (Single-Shot) при условии, что устройство находится в режиме Sleep или Idle, могут привести к большему количеству передач данных, чем ожидается.

36) Режим дозирования и исключения.
Исключение по ошибке DMA может не сгенерироваться, если устройство находится в режиме дозирования.

37) Модуль DCI.
При использовании более одного передающего буфера модуль DCI нарушит передаваемые по линии CSDO данные.

В следующих разделах приведено более подробное описание указанных проблем, а также способы их решения.

1. Модуль генератора в режиме дозирования

В режиме дозирования (Doze) (CLKDIV<11> = 1) частота ЦПУ замедляется, но периферия работает на полной скорости. Если при этом ЦПУ попытается выполнить запись в SFR любого периферийного модуля, это может привести к тому, что все последующие изменения этого регистра периферийным модулем до конца текущего тактового цикла ЦПУ не будут применены.

Например, если модуль АЦП активен в режиме дозирования, главная программа должна избегать записи в регистры ADCCONx из-за того, что эти регистры используются модулем АЦП. Если ЦПУ выполнит запись до того, как это сделает модуль АЦП, тогда любая попытка модуля АЦП выполнить запись в эти регистры потерпит неудачу.

Решение проблемы

Избегайте написания кода, меняющего в режиме дозирования те регистры SFR, которые могут изменяться включенными периферийными модулями.

2. Модуль 12-разрядного АЦП

Технические характеристики для 12-разрядного режима работы модуля АЦП не соответствуют опубликованным в техническом описании на устройство.

Решение проблемы

Настройте модуль АЦП на 11-разрядный режим работы с максимальной скоростью преобразования 300 тыс. выборок/с.

1) Технические характеристики, приведённые в Таблице 1, отражают 11-разрядный режим работы АЦП. Рекомендуется использовать сопротивление источника RIN 200 Ом, а время осуществления выборки - 3 TAD, чтобы обеспечить совместимость с будущими улучшенными модулями АЦП. Потеря кодов возможна каждые 27 кодов.

2) Использовании 10-разрядного АЦП с INL<±2 LSB и DNL<±1 LSB не приводит к потерям кодов, но в этом случае максимальная скорость преобразования составит 300 тыс. выборок/с.

Таблица 1. Производительность АЦП (11-разрядный режим работы)

Номер параметраОбозначениеМин.Тип.Макс.Ед. измеренияУсловия
AD17RIN--200Ом12-разрядный режим работы
Точность АЦП - Измерения проводились при внешних VREF+ / VREF-
AD20aNr-12-Бит 
AD21aINL-2-2LSB 
AD22aDNL-1.5-1LSB 
AD23aGERR1510LSB 
AD24aEOFF136LSB 
Точность АЦП - Измерения проводились при внутренних VREF+ / VREF-
AD21aaINL-2-2LSB 
AD22aaDNL-1.5-1LSB 
AD23aaGERR51020LSB 
AD24aaEOFF3615LSB 
Динамическая характеристика
AD33aFNYQ--150КГц 
AD34aENOB9.59.610.4Бит 
Скорость АЦП-преобразования
AD56aFCNV--300тыс. выборок/с 
AD57aTSAMP-3 TAD-- 

3. Модуль 10-разрядного АЦП

Характеристики работы модуля АЦП, настроенного на работу в 10-разрядном режиме, для скоростей выше 500 тыс. выборок/с не соответствуют техническим характеристикам, опубликованным в техническом описании на устройство.

Для скорости 500 тыс. выборок/с модуль соответствует опубликованным техническим характеристикам за исключением параметров AD23Bbb (усиление (Gain)) и AD24bb (смещение (Offset)).

Технические характеристики модуля для скорости 600 тыс. выборок/с приведены в Таблице 2.

Решение проблемы

Нет. Производительность АЦП, указанная в техническом описании, будет поддерживаться в будущих версиях чипов.

Таблица 2. Технические характеристики модуля для скорости 600 тыс. выборок/с

Номер параметраОбозначениеМин.Тип.Макс.Ед. измеренияУсловия
AD17RIN--200Ом10-разрядный режим работы
Точность АЦП - Измерения проводились при внешних VREF+ / VREF-
AD20bNr-10-Бит
AD21bINL-2-2LSB
AD22bDNL-1.5-2LSB
AD23bGERR136LSB
AD24bEOFF125LSB
Точность АЦП - Измерения проводились при внутренних VREF+ / VREF-
AD21bbINL-2-2LSB
AD22bbDNL-1.5-2LSB
AD23bbGERR1612LSB
AD24bbEOFF2510LSB
Динамическая характеристика
AD33bFNYQ--300КГц
AD34bENOB8.59.79.8Бит
Скорость АЦП-преобразования
AD56bFCNV--600тыс. выборок/с
AD57bTSAMP-3 TAD--

4. Взаимодействие модуля DMA с командой EXCH

Команда EXCH выполняется некорректно, если один из операндов численно равен адресу любого из SFR-регистров DMAC данной версии чипа.

Решение проблемы

Для ассемблерного кода рекомендуется команду

EXCH Wsource, Wdestination

заменить на следующие строки:

PUSH Wdestination
MOV Wsource, Wdestination
POP Wsource

Если же вы используете компилятор MPLAB C30 C, проверьте ассемблерный код ("View"->"Disassembly Listing") на наличие команды EXCH. Если она используется, убедитесь, что операнды не равны адресам SFR-регистров модуля DMA.

5. Команда DISI

Команда DISI отключает прерывания на заданное число циклов. Например, если пользователь выполнит DISI #7, эта команда выключит прерывания на 7+1 циклов (7 циклов + 1 цикл, в течение которого выполняется сама команда). В этом случае команда DISI использует счётчик, который уменьшается от 7 до 0. Значение 7 загружается в счётчик в конце команды.

Если код пользователя выполняет ещё одну команду DISI в том же самом цикле, когда счётчик DISI должен принять значение 0, новый отсчёт загружается в счётчик, но конечный автомат DISI не переключается должным образом, чтобы продолжить запрет прерываний. В этой точке все прерывания включаются. В следующий раз, когда код пользователя выполнит команду DISI, эта функция выполнится нормально и заблокирует прерывания.

Кратко говоря, эта проблема возникает, когда выполнение команды DISI совпадает с обнулением счётчика текущей DISI. Выполнение же команды до обнуления счётчика не вызывает этой ошибки. В этом случае счётчик DISI загружается новым значением, и прерывание остаётся отключенным до тех пор, пока счётчик не станет равным нулю.

Решение проблемы

При выполнении в коде нескольких команд DISI убедитесь, что между моментом обнуления счётчика DISI и следующей командой DISI имеется хотя бы один цикл. Либо следите, чтобы команды DISI вызывалась до того, как счётчик DISI обнулится.

6. Выходы модуля компаратора

При следующих условиях на выходном выводе компаратора возникнет всплеск:

1) Программа пользователя изначально выдаёт на вывод ввода/вывода высокий уровень с помощью выхода модуля компаратора или записи в соответствующий регистр PORT.

2) Выход модуля компаратора настроен и включен на выдачу на вывод низкого уровня в несколько более позднее время (OCxCON = 0x0002 или OCxCON = 0x0003).

При этих условиях выход модуля компаратора выдаёт на вывод низкий уровень в течение одного цикла команд (TCY) после включения модуля.

Решение проблемы

Нет. Однако пользователь может использовать прерывание по таймеру и запись в соответствующий регистр PORT, чтобы контролировать вывод вручную.

7. Выход модуля компаратора в режиме ШИМ

Выход модуля компаратора пропустит событие сравнения, если текущее значение регистра рабочего цикла (OCxRS) равно 0x0000 (рабочий цикл 0%), и в него загружается значение 0x0001. Событие сравнение пропускается только в первую запись значения 0x0001 в OCxRS, и выход ШИМ остаётся в состоянии низкого уровня в течение одного периода ШИМ. Далее высокий и низкий уровни ШИМ появляются в заданном порядке.

Решение проблемы

Нет. Если текущее значение регистра OCxRS равно 0x0000, избегайте записи в него значения 0x0001. Вместо этого записывайте в регистр значение 0x0002, хотя в этом случае рабочий цикл будет немного отличаться от нужного значения.

8. Модуль SPI в режиме ведущего с кадровым обменом

Модуль SPI не генерирует импульсы синхронизации кадра, если он настроен на режим ведущего с кадровым обменом, и начало данных выбрано совпадающим с началом импульса синхронизации кадра (FRMEN = 1, SPIFSD = 0, FRMDLY = 1). Однако в режиме ведомого с кадровым обменом и в режиме ведущего с кадровым обменом при FRMDLY = 0 модуль функционирует корректно.

Решение проблемы

Если DMA не используется, вручную подайте на вывод SSx (x = 1 или 2 - номер модуля) высокий уровень с помощью соответствующего регистра PORT, а затем по истечении необходимой ширины одного битового импульса подайте на него низкий уровень. Эту операцию необходимо выполнять при записи передающего буфера.

Если же DMA используется, и при этом другие периферийные модули не используют DMA-передачи, используйте прерывание по таймеру для периодической генерации импульса синхронизации кадра (используя метод, описанный выше) после каждых 8 или 16 битовых периодов (в зависимости от размера слова данных, выбранного битом MODE16).

Если FRMDLY = 0, то никакого решения проблемы не требуется.

9. Модуль SPI в режиме выбора ведомого

В режиме выбора ведомого (включается установкой SSEN = 1) модуль SPI функционирует некорректно. Независимо от того, находится ли вывод SSx (x = 1 или 2) в состоянии высокого, либо низкого уровня, передача данных SPI завершится и будет сгенерировано прерывание.

Решение проблемы

Если DMA не используется, в прерывании SPI вручную опрашивайте состояние вывода чтением соответствующего бита LAT:

1) Если бит LAT = 0, выполняйте необходимое чтение/запись

2) Если бит LAT = 1, тогда сбросьте флаг прерывания SPI (SPIxIF), выполните фиктивное чтение регистра SPIxBUF, а затем возврат из подпрограммы обработки прерывания.

Если используется DMA, то решения проблемы нет.

10. Модуль SPI: бит SMP

Бит SMP (SPIxCON1<9>, где x = 1 или 2) не имеет никакого эффекта, если модуль SPI настроен на режим ведомого со значением предделителя 1:1. В этом режиме независимо от того, установлен ли бит SMP или сброшен, выборка данных всегда осуществляется в конце времени выдачи данных.

Решение проблемы

Если требуется осуществлять выборку в середине времени выдачи данных, тогда настройте модуль SPI на использование значения предделителя, отличного от 1:1, с помощью битов PPRE<1:0> и SPRE<2:0> регистра SPIxCON1.

11. Модуль ECAN: передача сообщений из нескольких буферов

Если несколько передающих буферов ECAN одновременно становятся в очередь на передачу (несколько битов TXREQ одновременно устанавливаются в 1), то передачи сообщений из разрешённых буферов могут смешаться друг с другом. В результате чего периодически будут передаваться неправильные идентификатор и данные.

Решение проблемы

В каждый момент времени устанавливайте запрос на передачу только для одного передающего буфера. Для этого в пользовательской программе, перед установкой бита TXREQn для того буфера, который должен осуществить передачу, проверяйте, сброшены ли все остальные биты TXREQn.

12. Модуль ECAN: идентификатор

При определённых условиях первые пять битов передаваемого идентификатора могут не соответствовать значению SID передающего буфера.

Если модуль ECAN обнаруживает начало кадра (SOF) в третьем бите межкадрового интервала, и если при этом имеется ожидающее передачи сообщение, первые пять битов передаваемого идентификатора могут быть повреждены.

Решение проблемы

Нет.

13. Модуль ECAN: режим петли

Модуль ECAN (ECAN1 или ECAN2) в режиме петли функционирует некорректно.

Решение проблемы

Не используйте режим петли.

14. Модуль I2C: бит обнаружения коллизии

Бит обнаружения коллизии на шине (BCL) не устанавливается, если коллизия на шине возникает во время событий RESTART или STOP. Тем не менее, бит BCL устанавливается, если коллизия возникает во время события START.

Решение проблемы

Нет.

15. INT0, АЦП и режим Sleep/Idle

Триггеры событий АЦП с вывода INT0 не пробуждают устройство из режима Sleep или Idle, если биты SMPI не равны нулю. Это означает, что если настроить АЦП на генерацию прерывания после некоторого числа преобразований, запускаемых событием INT0, то АЦП-преобразование запущено не будет, и устройство останется в режиме Sleep. АЦП выполнит преобразование и пробудит устройство только в том случае, если он настроен генерировать прерывание после каждого запущенного INT0 преобразования (SMPI<3:0> = 0000).

Решение проблемы

Нет. Если требуется триггер событий АЦП с вывода INT0, запишите в SMPI<3:0> значение "0000" (прерывание по каждому преобразованию).

16. Режим дозирования и исключения

Исключения по ошибке декодирования адреса, по ошибке стека, по математической ошибке и по ошибке DMA не пробудят устройство из режима дозирования.

Решение проблемы

Нет.

17. JTAG программирование

JTAG программирование не работает.

Решение проблемы

Нет.

18. Модуль UART: проверка чётности и генератор скорости

Если включена проверка чётности, то при наличии в генераторе скорости передачи (BRG) нечётного значения может возникнуть ошибка чётности, которая индицируется установкой бита PERR (UxSTA<3>). Это влияет на проверку чётности и в чётном, и в нечётном режимах.

Решение проблемы

Загрузите в регистр генератора скорости (UxBRG) чётное значение, либо отключите возможность проверки чётности загрузкой значения 0b00 или 0b11 в биты выбора чётности и данных PDSEL<1:0> (UxMODE<2:1>).

19. Модуль UART: бит переполнения приёмного буфера

Бит обнаружения ошибки переполнения приёмного буфера OERR (UxSTA<1>) может установиться до того, как переполнится FIFO-буфер модуля. Полностью FIFO заполняется после получения модулем четвёртого байта. Бит OERR должен устанавливаться после принятия в сдвиговый регистр модуля пятого байта, но вместо этого он может установиться после того, как четвёртый байт переписан из сдвигового регистра в FIFO-буфер, и при этом сдвиговый регистр пуст.

Решение проблемы

После приёма четвёртого байта установится флаг прерывания по приёму U1RXIF(IFS0<11>), либо U2RXIF(IFS1<14>), указывая, что FIFO-буфер модуля полон. При этом может установиться и бит OERR. После четырёхкратного чтения приёмного буфера UxRXREG (для очистки FIFO), программно сбросьте и бит UxRXIF, и бит OERR.

20. Модуль UART: режим 4x генератора скорости

Принимаемые данные могут быть повреждены, если генератор скорости передачи настроен на режим 4x (BRGH = 1).

Решение проблемы

Используйте режим скорости передачи 16x (BRGH = 0) и откорректируйте скорость соответствующим образом.

21. Модуль UART: бит UTXISEL0

Бит UTXISEL0 (UxSTA<13>) всегда читается как ноль, независимо от записанного в него значения. То есть в него можно записать и "0", и "1", но он всегда будет читаться как ноль. Это влияет на операции чтения-модификации-записи, такие как побитовые или сдвиговые. В результате выполнения команды чтения-модификации-записи (например, BSET, BLCR) над регистром UxSTA в бит UTXISEL0 всегда будет записываться ноль.

Решение проблемы

Если необходимо, чтобы бит UTXISEL0 имел значение "1", избегайте применения команд чтения-модификации-записи к регистру UxSTA. Вместо этого скопируйте регистр UxSTA во временную переменную и установите UxSTA<13>. Затем скопируйте новое значение обратно в регистр UxSTA.

22. Модуль UART: функция автоподстройки

Функция автоподстройки скорости не может корректно вычислять скорость, если установлен бит включения высокой скорости передачи (BRGH). Когда этот бит установлен, скорость вычисляется так же, как и при BRG = 0.

Решение проблемы

Если нужна функция автоподстройки скорости, используйте режим низкой скорости передачи, который включается сбросом бита BRGH.

23. Модуль UART: символ sync break

Если выбрана функция автоподстройки скорости, символ перерыва синхронизации (sync break) (0x55) может быть помещён в буфер FIFO в качестве данных.

Решение проблемы

Чтобы предотвратить запись символа перерыва синхронизации в FIFO, перед включением автоподстройки скорости (ABAUD = 1) загрузите в регистр UxBRG либо 0x0000, либо 0xFFFF.

24. Модуль ECAN: DMA и передающие буферы

Если модуль ECAN используется вместе с DMA, передающие буферы 6 и 7 могут передавать неправильный тип сообщения. Например, буфер настроен на передачу стандартного кадра, но периодически может передавать эти кадры как расширенные.

Решение проблемы

Нет. Не используйте для передачи буферы 6 и 7, вместо них используйте передающие буферы 0, 1, 2, 3, 4 или 5.

25. Модуль I2C: коллизия записи

Запись в регистр I2CxTRN во время передачи бита START генерирует коллизию записи, которая индицируется установкой бита IWCOL (I2CxSTAT<7>). В этом состоянии любая запись в регистр I2CxSTAT должна блокироваться, но, тем не менее, он может оказаться записанным, хотя передачи и не будут происходить, пока бит IWCOL не будет сброшен программно.

Решение проблемы

После каждой записи в регистр I2CxTRN считывайте бит IWCOL, чтобы убедиться, что не произошло коллизии. Если же бит IWCOL установлен, необходимо сбросить его программно, а также перезаписать регистр I2CxTRN.

26. Модуль I2C: бит ACKSTAT

Бит ACKSTAT (I2CxSTAT<15>) отражает принятое состояние ACK/NACK для передачи только в режиме ведущего, но не для режима ведомого. В результате этого ведомый не может использовать этот бит, чтобы определить, получил ли он ACK или NACK от ведущего. В будущих версиях чипа бит ACKSTAT будет отражать состояние для передачи и в режиме ведущего, и в режиме ведомого.

Решение проблемы

После передачи байта ведомый должен опрашивать линию SDA (с учётом, что период таймаута зависит от приложения), чтобы определить, принято ли ACK("0"), либо NACK("1").

27. Модуль I2C: бит D_A

Бит состояния D_A (I2CxSTAT<5>) устанавливается по ведомому приёму данных в регистр I2CxRCV, но не устанавливается при ведомой записи в регистр I2CxTRN. В будущих версиях чипа бит D_A будет устанавливаться и при ведомой записи в регистр I2CxTRN.

Решение проблемы

Используйте бит состояния D_A только для определения состояния ведомого приёма, но не для состояния ведомой передачи.

28. Исключения и режим Idle

Если сбой генератора происходит, когда устройство находится в режиме Idle, исключение по сбою генератора не переходит на подпрограмму обработки исключений. Вместо этого, если включен диспетчер отказоустойчивости тактового генератора (FSCM), устройство просто пробудится из режима Idle и продолжит выполнение кода.

Решение проблемы

Всякий раз, когда устройство пробуждается из режима Idle (предполагается, что FSCM включен), программа пользователя должна проверять состояние бита OSCFAIL (INTCON1<1>), чтобы определить, произошёл ли сбой тактового генератора, и затем выполнить соответствующее операцию по переключению тактового генератора.

29. Пробуждение из режима Sleep по MCLR

Если импульс сброса на MCLR пробуждает устройство из режима Sleep, устройство пробуждается без ожидания запуска внутреннего регулятора напряжения. В следствие этого произойдёт сброс по снижению напряжения питания.

Решение проблемы

Нет.

30. Модуль ECAN: регистры C1RXOVF2 и C2RXOVF2

Регистры C1RXOVF2 и C2RXOVF2 не функционируют. Они всегда читаются как 0x0000, даже если произошло переполнение по приёму.

Решение проблемы

Нет.

31. FRC-генератор

Точность внутреннего FRC-генератора не соответствует указанным в техническом описании характеристикам (Таблица 23-18 в "Техническом описании на семейство PIC24H" ("PIC24H Family Data Sheet" - DS70175)). Фактические характеристики точности приведены в Таблице 3.

Решение проблемы

Нет.

Таблица 3. Точность внутреннего FRC-генератора

Динамические характеристикиСтандартные условия работы: от 3.0 В до 3.6 В (если не указано иначе)
Рабочая температура -40 °C ≤ TA ≤ +85 °C (промышленный диапазон)
№ параметраХарактеристикаМин.Тип.Макс.Единица измеренияУсловия
Точность внутреннего FRC при частоте FRC = 7.37 МГц (1,2)
F20 -3-+3%-40 °C ≤ TA ≤ +85 °CVDD = 3.0 - 3.6 В

Примечание:

1) Частота проверена при 25 °C и 3.3 В. Для компенсации температурных сдвигов необходимо использовать биты TUN.

2) Устройства настроены на начальную частоту 7.37 МГц (±2%) при 25 °C.

32. Модуль SPI: функциональное назначение вывода SDI1

Функциональное назначение вывода 34 (U1RX/SDI1/RF2) для модуля SPI1 включается модулем SPI2. В результате возникает два эффекта:

1) Функциональное назначение RF2 отключаются, если включен модуль SPI2.

2) Это вывод не будет функционировать как SDI1, если включен только модуль SPI1.

Эта проблема актуальна только для 64-выводных устройств:
» PIC24HJ64GP206
» PIC24HJ128GP206
» PIC24HJ256GP206
» PIC24HJ128GP306
» PIC24HJ64GP506
» PIC24HJ128GP506

Решение проблемы

Необходимо выполнить два условия:

1) Если используется модуль SPI2, то вывод 34 нельзя использовать в качестве вывода ввода/вывода (RF2). Рекомендуется использовать другой вывод ввода/вывода.

2) Если используется модуль SPI1, модуль SPI2 также необходимо включить, чтобы активировать функционирование вывода 34 в качестве SDI1. В качестве альтернативы вывод ввода/вывода (RF2) можно настроить как вход, что позволит выводу 34 функционировать как SDI1.

33. Модуль UART: функция автоподстройки

Функция автоподстройки скорости может неправильно вычислять скорость для некоторых комбинаций скоростей передачи и тактовых частот, вследствие чего значение BRG больше или меньше ожидаемого на 1. Это может привести к ошибкам приёма и передачи.

Решение проблемы

Проверьте автоподстройку скорости на различных комбинациях тактовых частот и скоростей, которые планируется использовать в приложении. Если генерируется неточное значение BRG, в пользовательской программе вручную откорректируйте скорость передачи.

34. Регистр идентификатора устройства

На некоторых устройствах сразу же после RTSP или ICSP-программирования Flash-памяти содержимое регистра идентификатора устройства может измениться от запрограммированного заводским способом значения по умолчанию.

В результате инструментальные средства разработки не будут распознавать это устройство и будут генерировать сообщение об ошибке, указывающее, что идентификатор устройства и шифр компонента устройства не совпадают. Кроме того, некоторые периферийные модули окажутся перенастроенными и не будут функционировать так, как приведено в техническом описании на устройство.

За разъяснениями по RTSP и ICSP-программированию Flash-памяти обратитесь к Разделу 5 "Программирование Flash-памяти" (DS70191) "Справочного руководства по семейству dsPIC33F" ("dsPIC33F Family Reference Manual").

Решение проблемы

Все подпрограммы RTSP и ICSP-программирования Flash-памяти необходимо изменить следующим образом:

1) Не разрешается программирование по словам. Любое программирование по словам нужно заменить на программирование по строкам.

2) Во время строкового программирования загружайте защёлки записи как описано в пункте 5.4.2.3 "Загрузка защёлок записи" Раздела 5 "Программирование Flash-памяти" (DS70191).

3) После того как защёлки загружены, перезагрузите исходными данными все ячейки защёлки (в данной строке), у которых 5 младших битов установлены в 0x18. Например, перезагрузите нужными данными ячейки защёлки со следующими значениями:

0xXXXX18, 0xXXXX38, 0xXXXX58, 0xXXXX78, 0xXXXX98, 0xXXXXB8, 0xXXXXD8, 0xXXXXF8

4) Запустите программирование по строкам установкой NVMOP<3:0> = "0001" (операция строкового программирования памяти) в регистре NVMCON.

5) Когда строковое программирование завершится, проверьте содержимое Flash-памяти.

6) Если при проверке Flash-памяти будут обнаружены ошибки, повторите шаги 2 - 5. Если после повторной записи снова будут обнаружены ошибки, сообщите об этой проблеме в Microchip.

Шаги 1 - 5 решения проблемы реализованы в MPLAB IDE версии 7.61 для внутрисхемных эмуляторов MPLAB ICD2 и MPLAB REAL ICE, а также для инструментальных средств PM3.

35. Модуль DMA

Если канал DMA включен в однократном режиме (Single-Shot) в то время как устройство находится в режиме Idle, а соответствующий периферийный модуль активен и настроен на работу в режиме Idle, канал DMA может не отключиться сразу же после передачи требуемого количества данных.

В результате количество переданных байтов или слов данных может превышать заданное в регистре DMAxCNT.

Например, если передачи DMA активны и для передачи, и для приёма байта SPI, и разрешено прерывание для пробуждения устройства из режима Idle только по приёмному каналу DMA, то в тот момент, когда устройство пробуждается из режима Idle, будет передан лишний байт.

Решение проблемы

Нет.

36. Режим дозирования и исключения

Исключение по ошибке DMA может не сгенерироваться, если устройство находится в режиме дозирования.

Решение проблемы

Нет.

37. Модуль DCI

Если значение BLEN в регистре DCICON2 больше нуля, модуль DCI разрешает перезапись данных в регистры TXBUF1, TXBUF2 и TXBUF3, в то время, когда передаётся TXBUF0. Это приводит к потере исходного содержания регистров TXBUF1, TXBUF2 и TXBUF3. Кроме того, значения последовательности регистров TXBUF1-3 не будут синхронизированы с TXBUF0.

Решение проблемы

Прикладная программа должна вставлять задержку в начале подпрограммы обработки прерывания (ISR) от DCI. Эта задержка должна быть достаточно долгой, чтобы модуль DCI успел завершить передачу TXBUF0. После этого во все передающие регистры можно будет записывать новые значения.

Приложение А. История ревизий

Ревизия A (6/2006)
Выпущена первичная версия документа.

Ревизия B (12/2006)
Добавлены проблемы 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17.

Ревизия C (3/2007)
Изменено название документа, обновлена проблема 8 и добавлены проблемы 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31.

Ревизия D (6/2007)
Добавлены следующие проблемы: 32 (SPI), 33 (UART), 34 (Регистр идентификатора устройства), 35 (DMA), 36 (Режим дозирования и исключения), 37 (DCI).


© PIClist-RUS (piclist.ru), 2009 г.

PIClist RUS (piclist.ru) © 2009
все права сохранены. перепечатка статей и переводов с данного сайта запрещена.