Каталог статей

Главная » Статьи » Мои статьи

Список ошибок в микросхемах семейства PIC18F2585/2680/4585/4680 Rev. А3

Полученные вами микросхемы PIC18F2585/2680/4585/4680 Rev.A3 (ревизия А3) функционально соответствуют техническому описанию на них (DS39625B) за исключением отклонений, описанных ниже. Любые проблемы, связанные с пояснением технического описания (Data Sheet Clarification), относящиеся к PIC18F2585/2680/4585/4680, будут сообщены в отдельном списке ошибок технического описания (Data Sheet errata). Имеющиеся проблемы вы можете посмотреть на сайте Microchip.

Все проблемы, приведённые здесь, будут исправлены в будущих ревизиях микросхем PIC18F2585/2680/4585/4680.

Данный список ошибок применим только к устройствам PIC18F2585/2680/4585/4680 с указанными ниже идентификаторами устройства/ревизии (Device/Revision ID):

Номер микросхемыID устройстваID ревизии
PIC18F258501 1010 10000100
PIC18F268001 1010 11000100
PIC18F458501 1010 10100100
PIC18F468001 1010 11100100

Идентификаторы устройства (DEVID1 и DEVID2) размещаются по адресам 3FFFFEh:3FFFFFh, в конфигурационном пространстве устройства. Они показаны в шестнадцатеричном виде в формате "DEVID2 DEVID1".

1. Модуль ECCP

При наблюдении за условием выключения с помощью проверки бита ECCPASE (ECCP1AS<7>) или выполнении битовой операции на бите ECCPASE устройство может выдать непредсказуемые результаты.

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

Перед выполнением проверки бита или битовой операции на бите ECCPASE скопируйте содержимое регистра ECCP1AS в регистр-аккумулятор (W) и выполните операцию проверки бита на нём.

Если избегать этих операций на бите ECCPASE в регистре ECCP1AS, модуль будет работать нормально.

В Примере 1 показано выполнение битовых операций с битом ECCPASE с помощью регистра W.

Пример 1

MOVF ECCP1AS, W
BTFSC WREG, ECCPASE
BRA SHUTDOWN_ROUTINE
Устройства, для которых актуальна эта проблема

Все разрабатываемые и выпускаемые устройства.

2. Модуль ECCP

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

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

Программно отключите возможность авто-возобновления, опрашивайте флаг прерывания от таймера Timer2 (TMR2IF) и не сбрасывайте бит ECCPASE, пока установлен бит TMR2IF.

Устройства, для которых актуальна эта проблема

Все разрабатываемые и выпускаемые устройства.

3. Модуль ECCP

ECCP1, настроенный на авто-выключение с компаратором Comparator 1, повреждает импульс ШИМ. Кроме того, он не синхронизирует импульс в соответствии с началом периода, и конец импульса может произойти в любое время в пределах периода.

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

Нет.

Устройства, для которых актуальна эта проблема

Все разрабатываемые и выпускаемые устройства.

4. Модуль ECCP

Событие авто-выключения заставит выводы ECCP (P1A, P1B, P1C, P1D) выдавать более высокий ток, чем ожидается. Это происходит тогда, когда биты ECCPAS1 или ECCPAS0 установлены, и возникает событие авто-выключения.

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

Нет.

Устройства, для которых актуальна эта проблема

Все разрабатываемые и выпускаемые устройства.

5. Модуль ECCP

Источник авто-выключения, FLT0, имеет инвертированную полярность по отношению к указанной в Разделе 16.4.7 "Авто-выключение улучшенного ШИМ" технического описания на устройство. Уровень логической единицы на FLT0 сгенерирует выключение ECCP1.

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

Инвертируйте логический уровень в исходном коде программы.

Устройства, для которых актуальна эта проблема

Все разрабатываемые и выпускаемые устройства.

6. Модуль ECCP

Если во время отладки с помощью внутрисхемного отладчика (MPLAB ICD2) выдана команда Halt (останов), модуль ECCP может полностью зависнуть. Однако если выключение разрешено и запущено выводом FLT0, бит ECCPASE устанавливается, а выводы переводятся в их состояние по выключению, как задано битами PSSAC1:PSSAC0 и PSSBD1:PSSBD0, независимо от останавливаемого процесса отладки.

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

Нет.

Устройства, для которых актуальна эта проблема

Все разрабатываемые и выпускаемые устройства.

7. Модуль ECCP

При работе с Timer1 или с Timer3 в качестве счётчиков со значением предделителя, отличным от 1:1 и работе ECCP в режиме сравнения с триггером специального события (регистр CCP1CON, биты CCP1M3:CCP1M0 = 1011), сброс таймера по триггеру специального события происходит как только возникает соответствие между TMRxH:TMRxL и CCPR1H:CCPR1L.

Это отличается от PIC18F458, где сброс таймера по триггеру специального события происходит на следующем переходе счётчика предделителя после возникновения соответствия между TMRxH:TMRxL и CCPR1H:CCPR1L.

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

Чтобы на семействе PIC18F4680 достигнуть такого же периода сброса таймера, как и на семействе PIC18F458 для заданного источника тактовой частоты, прибавьте 1 к значению в CCPR1H:CCPR1L. Другими словами, если CCPR1H:CCPR1L = x для PIC18F458, то, чтобы достигнуть такой же период сброса на семействе PIC18F4680, CCPR1H:CCPR1L = x + 1, где предделитель равен 1, 2, 4 или 8 (в зависимости от значений битов T1CKPS1:T1CKPS0).

Устройства, для которых актуальна эта проблема

Все разрабатываемые и выпускаемые устройства.

8. Модуль ECCP и CCP

Когда ECCP1 и CCP2 настроены на режим ШИМ со значением предделителя таймера Timer2 равным 1:1 и с периодом рабочего цикла, установленным в -1, это может привести к тому, что на выводе (выводах) ШИМ останется низкий логический уровень.

Сброс регистра PR2 для выбора самого короткого периода также может привести к тому, что на выводе (выводах) останется низкий логический выходной уровень.

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

Чтобы получить достоверную форму сигнала, проверьте, что выбранный рабочий цикл не равен 10 битному периоду минус 1 до того, как записать эти ячейки, или использовать предделитель Timer2 со значениями 1:4 или 1:16. Также проверьте, что в регистр PR2 не записано значение 00h.

Все другие настройки рабочего цикла и периода будут работать так, как описано в техническом описании.

Возможность 10-разрядной точности для модулей ECCP и CCP сохраняется.

Устройства, для которых актуальна эта проблема

Все разрабатываемые и выпускаемые устройства.

9. Модуль Timer1/Timer3

Когда Timer1 или Timer3 настроен на внешний источник тактовых импульсов, и регистр CCP1CON или ECCP1CON настроен значением 0x0B (режим сравнения, триггер специального события), таймер не сбросится по триггеру специального события.

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

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

Устройства, для которых актуальна эта проблема

Все разрабатываемые и выпускаемые устройства.

10. Модуль Timer1/Timer3

Когда Timer1/Timer3 находится в режиме синхронизации от внешнего тактового генератора и период внешнего тактового генератора располагается в интервале от 1 до 2 TCY, прерывания иногда могут пропускаться.

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

Нет.

Устройства, для которых актуальна эта проблема

Все разрабатываемые и выпускаемые устройства.

11. Модуль Timer1/Timer3

Когда Timer1/Timer3 работает в 16-битном режиме, и значение предделителя отличается от 1:1, запись в регистры буфера TMR1H/TMR3H может увеличить длительность периода между инкрементами таймера на период, в течение которого был записан TMR1H/TMR3H. Это не меняет фактического значения предварительного деления.

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

Не записывайте TMR1H/TMR3H, когда Timer1/Timer3 работает, либо записывайте TMR1L/TMR3L сразу же после записи в TMR1H/TMR3H.

Не записывайте TMR1H/TMR3H и ждите следующего события, перед тем как обновить TMR1L/TMR3L

Устройства, для которых актуальна эта проблема

Все разрабатываемые и выпускаемые устройства.

12. Модуль Timer1

В режиме 16-разрядного асинхронного счётчика (с использованием или без использования генератора Timer1), буферы TMR1H и TMR3H не обновляются, если считывается TMRxL.

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

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

1. Использовать 8-разрядный режим, сбросив бит RD16 (T1CON<7>).

2. Использовать возможность синхронизации от внутреннего тактового генератора, сбросив бит (T1CON<2>).

Устройства, для которых актуальна эта проблема

Все разрабатываемые и выпускаемые устройства.

13. Модуль MSSP

В режиме 10-битной адресации, если выдаётся повторный START (Repeated Start), за которым следуют старший байт адреса и команда записи, подтверждение (ACK) не выдаётся.

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

Возможны два решения проблемы:

1. Режим с одним ведущим. В этом режиме пользователь должен выдать STOP, затем START, затем команду записи на старший байт адреса, а потом младший байт адреса, за которым следуют данные.

2. Режим со многими ведущими. В этом режиме пользователь должен выдать повторный START, выдать фиктивную команду записи на другой адрес, выдать ещё один повторный START, а затем передать команду записи на исходный адрес. Эта процедура предотвратит потерю шины.

Устройства, для которых актуальна эта проблема

Все разрабатываемые и выпускаемые устройства.

14. Модуль MSSP

Когда MSSP настроен для работы в режиме ведущего SPI, вывод SDO нельзя отключить установкой бита TRISC<5>. Вывод SDO всегда выдаёт содержимое буфера SSPBUF, независимо от состояния бита TRIS.

В режиме ведомого, если разрешён выбор ведомого (Slave Select), SSPM3:SSPM0 = 0010 (SSPCON<3:0>), вывод SDO нельзя отключить подачей высокого логического уровня на вывод (RA5).

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

Нет.

Устройства, для которых актуальна эта проблема

Все разрабатываемые и выпускаемые устройства.

15. Модуль MSSP

После инициации передачи I2C, регистр SSPBUF можно записать в течение 10 TCY до того как возможность дополнительной записи будет заблокирована.

Передаваемые данные могут быть повреждены, если записать SSPBUF в течение этого времени.

Бит WCOL устанавливается всегда, когда запись в SSPBUF происходит во время передачи.

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

Избегайте записи в SSPBUF, пока передача данных не завершена, что индицируется установкой бита SSPIF (PIR<3>).

После записи в SSPBUF проверяйте, что бит WCOL (SSPCON1<7>) сброшен, чтобы гарантировать, что любая возможная незавершённая передача не будет повреждена.

Устройства, для которых актуальна эта проблема

Все разрабатываемые и выпускаемые устройства.

16. Модуль MSSP

В его текущей реализации режим ведущего I2C работает следующим образом:

1. Генератор скорости передачи данных для режима ведущего I2C медленнее скоростей, указанных в Таблице 17-3 технического описания.

Для данной ревизии микросхемы используйте значения, приведённые в Таблице 1 вместо тех, которые даны в Таблице 17-3 технического описания. Отличия выделены жирным шрифтом.

2. Используйте следующую формулу вместо указанной в описании битов SSPM3:SSPM0 = 1000 Регистра 17-4 (SSPCON1) в техническом описании на устройство:

SSPADD = INT((FCY/FSCL) - (FCY/1.111 МГц)) - 1

Таблица 1. Тактовая частота I2C

FOSCFCYFCY*2Значение BRGFSCL (2 перехода BRG)
40 МГц10 МГц20 МГц0Eh400 КГц(1)
40 МГц10 МГц20 МГц15h312.5 КГц
40 МГц10 МГц20 МГц59h100 КГц
16 МГц4 МГц8 МГц05h400 КГц(1)
16 МГц4 МГц8 МГц08h308 КГц
16 МГц4 МГц8 МГц23h100 КГц
4 МГц1 МГц2 МГц01h333 КГц(1)
4 МГц1 МГц2 МГц08h100 КГц
4 МГц1 МГц2 МГц00h1 МГц(1)

Примечание 1: интерфейс I2C не соответствует спецификации I2C 400 КГц (которая применяется к скоростям выше 100 КГц) в полной мере, но её можно использовать с осторожностью там, где приложению требуются более высокие скорости.

17. Модуль MSSP

RCEN устанавливается, когда система находится в состоянии простоя. При нормальной работе установка бита RCEN должна игнорироваться модулем, когда система не в состоянии простоя.

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

Дождитесь, когда система перейдёт в состояние простоя. Для этого нужно проверить, сброшены ли следующие биты: ACKEN, RCEN, PEN, RSEN и SEN.

Устройства, для которых актуальна эта проблема

Все разрабатываемые и выпускаемые устройства.

18. Модуль MSSP

В системе I2C с множеством ведомых узлов не адресуемый ведомый может ответить на активность шины, когда данные на шине соответствуют его адресу. Первое появление установит бит BF. Второе появление установит биты BF и SSPOV. В обоих случаях бит SSPIF не устанавливается и прерывание не возникает. Устройство перейдёт на подпрограмму обработки прерываний только если прерывание разрешено и возникает соответствие адреса.

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

Ведомый I2C должен сбрасывать бит SSPOV после каждого события I2C, чтобы поддержать нормальный режим работы.

Устройства, для которых актуальна эта проблема

Все разрабатываемые и выпускаемые устройства.

19. Модуль MSSP

Было замечено, что после сброса по включению питания режим I2C не инициализируется должным образом, если просто настроить выводы SCL и SDA либо как входы, либо как выходы. Это отмечалось только в нескольких уникальных условиях эксплуатации системы.

Испытание статически выразительной выборки разрабатываемых систем в диапазоне напряжений и токов электропитания приложения должно показать, подвержена ли система этой проблеме.

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

Перед настройкой модуля для работы в режиме I2C:

1. Настройте выводы SCL и SDA как выходы сбросом соответствующих им битов TRIS.

2. Подайте на SCL и SDA низкий уровень сбросом соответствующих битов LAT.

3. Оставляя биты LAT сброшенными, настройте SCL и SDA как входы, установив соответствующие им биты TRIS.

После этого используйте регистры SPCON1 и SSPCON2 для настройки нужного режима I2C, как и ранее.

Устройства, для которых актуальна эта проблема

Все разрабатываемые и выпускаемые устройства.

20. Модуль MSSP

Когда MSSP настроен для работы в режиме SPI, бит состояния буфера BF (SSPSTAT<0>), не должен опрашиваться в программе напрямую для определения момента завершения передачи.

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

Скопируйте регистр SSPSTAT в переменную и выполните проверку бита на ней. В Примере 2 SSPSTAT копируется в регистр-аккумулятор, где и выполняется проверка бита.

Пример 2

loop_MSB:
 MOVF SSPSTAT, W
 BTFSS WREG, BF
 BRA loop_MSB

Другая возможность решить проблему - опрашивать бит прерывания модуля, SSPIF (PIR1<3>). Этот бит можно опрашивать, он будет устанавливаться по завершении передачи.

Устройства, для которых актуальна эта проблема

Все разрабатываемые и выпускаемые устройства.

21. Модуль MSSP

В режиме SPI выход SDO может меняться после неактивного фронта тактового импульса при выдаче бита "0". Это может повлиять на некоторые SPI-компоненты, которые считывают данные через 300 нс после неактивного фронта на SCK.

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

Нет.

Устройства, для которых актуальна эта проблема

Все разрабатываемые и выпускаемые устройства.

22. Модуль АЦП

Смещение АЦП больше, чем предел, указанный в Таблице 27-24 технического описания. Добавление параметра A06A и обновлённые условия и пределы показаны жирным шрифтом в Таблице 2.

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

Существует три решения проблемы:

1. Настройте АЦП на использование выводов VREF+ и VREF- для опорного напряжения. Это можно сделать, установив биты VCFG<1:0> (ADCON1<5:4>).

2. Выполните преобразование при известном значении опорного напряжения и откорректируйте результат АЦП в программе.

3. Увеличьте частоту тактового генератора системы до 40 МГц и откорректируйте настройки АЦП соответствующим образом. Более высокая частота тактового генератора уменьшит ошибку смещения.

Устройства, для которых актуальна эта проблема

Все разрабатываемые и выпускаемые устройства.

Таблица 2. Характеристики АЦП: PIC18F2585/2680/4585/4680 (INDUSTRIAL), PIC18LF2585/2680/4585/4680 (INDUSTRIAL)

№ параметраОбозначениеХарактеристикаМин.Тип.Макс.Единицы измеренияУсловия
A06AEOFFПогрешность смещения--<±1.5Младших битов (LSb)VREF = VREF+ и VREF-
A06EOFFПогрешность смещения--<±3.5Младших битов (LSb)VREF = VSS и VDD

23. Статические характеристики (BOR)

Значения параметра D005 (VBOR) в Разделе 27.1 "Статические характеристики: напряжение питания" технического описания на устройство при точке перехода для BORV1:BORV0 = 11 не применимы, поскольку устройство может выполнить сброс ниже минимального рабочего напряжения для устройства.

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

Нет.

Устройства, для которых актуальна эта проблема

Все разрабатываемые и выпускаемые устройства.

24. Модуль BOD/HLVD

Из-за допустимых отклонений продукции от нормы выбор самой низкой установки для обнаружения кратковременного снижения напряжения (BOD) (BORV1:BORV0 = 11) или сброса по снижению напряжения (LVR) (LVV = 0000) не рекомендуется, так как это может привести к тому, что фактическое значение напряжения для сброса по кратковременному провалу питания (BOR) или обнаружения падения напряжения (LVD) окажется ниже минимально допустимого VDD = 2.0 В.

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

Используйте более высокие пороги напряжений для BOR или HLVD, чтобы гарантировать обнаружение снижения VDD до того, как оно упадёт ниже 2.0 В.

Устройства, для которых актуальна эта проблема

Все разрабатываемые и выпускаемые устройства.

25. Прерывания

Если прерывание происходит во время двухцикловой команды, которая изменяет содержимое регистров STATUS, BSR или WREG, не изменённое значение регистра будет сохранено в соответствующий регистр быстрого возврата (теневой). При быстром возврате из прерывания, не изменённое значение восстановится в регистры STATUS, BSR или WREG.

Например, если прерывание с высоким приоритетом возникает во время выполнения команды "MOVFF TEMP, WREG", команда MOVFF завершится и в WREG будет загружено значение TEMP до перехода на ISR. Однако предыдущее значение WREG будет сохранено в регистр быстрого возврата во время перехода на ISR. При возврате из прерывания с быстрым возвратом, предыдущее значение WREG из регистра быстрого возврата будет записано в WREG. Это приведёт к тому, что WREG будет содержать значение, которое имелось в нём до выполнения "MOVFF TEMP, WREG".

Команды, на которые это влияет:

MOVFF Fs, Fd
где Fd - это WREG, BSR или STATUS;
MOVSF Zs, Fd
где Fd - это WREG, BSR или STATUS;
MOVSS [Zs], [Zd]
где приёмник - WREG, BSR или STATUS.
Решение проблемы

1. Программирование на ассемблере:

а) Если для изменения регистров WREG, BSR или STATUS используется любая из двухцикловых команд, не используйте команду RETFIE FAST для возврата из прерывания. Вместо этого сохраняйте/восстанавливайте WREG, BSR или STATUS с помощью программы в Примере 8-1 в техническом описании на устройство. В качестве альтернативы в случае с MOVFF для записи в WREG вместо неё используйте команду MOVF.

Например, используйте:

MOVF TEMP, W
MOVWF BSR
вместо
MOVFF TEMP, BSR

б) Как другой вариант, можно использовать следующее решение проблемы, показанное в Примере 3. Этот пример перезаписывает регистр быстрого возврата, выполняя в высокоприоритетной подпрограмме обработки фиктивный вызов Foo с возможностью быстрого возврата.

Пример 3

ISR @ 0x0008
 CALL Foo, FAST ; сохранить текущее значение WREG, BSR, STATUS во второй раз
Foo:
 POP ; сбрасывает адрес возврата вызова Foo
 : ; вставьте здесь код высокоприоритетной ISR
 :
 RETFIE FAST

2. Программирование на Си: правильное решение проблемы зависит от используемого компилятора. Пожалуйста, за более подробной информацией обратитесь к документации на ваш компилятор Си.

Если используется Microchip MPLAB C18 C Compiler, определите и высокоприоритетную, и низкоприоритетную функции обработчика прерывания как "низкоприоритетные" с помощью директивы pragma interruptlow. Эта директива инструктирует компилятор не использовать команду RETFIE FAST. Если соответствующий бит высокоприоритетного прерывания установлен в регистре IPRx, тогда прерывание обрабатывается как высокоприоритетное, несмотря на директиву pragma interruptlow.

Кусок кода, показанный в Примере 4, демонстрирует решение проблемы с помощью компилятора C18.

Пример 4

#pragma interruptlow MyLowISR
void MyLowISR(void)
{
 // Обработка низкоприоритетных прерываний
}
// Хотя MyHighISR является высокоприоритетным прерыванием, используйте pragma interruptlow, для того, чтобы
// компилятор не использовал retfie FAST
#pragma interruptlow MyHighISR
void MyHighISR(void)
{
 // Обработка высокоприоритетных прерываний
}
#pragma code highVector=0x08
void HighVector (void)
{
 _asm goto MyHighISR _endasm
}
#pragma code /* возврат на раздел кода по умолчанию */
#pragma code lowVector=0x18
void LowVector (void)
{
 _asm goto MyLowISR _endasm
}
#pragma code /* возврат на раздел кода по умолчанию */

В Примере 5 представлена оптимизированная версия кода на C18. Этот пример иллюстрирует, как уменьшить количество циклов команд с 10 до 3.

Пример 5

#pragma code high_vector_section=0x8
void high_vector (void)
{
 _asm
 CALL high_vector_branch, 1
 _endasm
}
void high_vector_branch (void)
{
 _asm
 POP
 GOTO high_isr
 _endasm
}
#pragma interrupt high_isr
void high_isr (void)
{
 ...
}
Устройства, для которых актуальна эта проблема

Все разрабатываемые и выпускаемые устройства.

26. Модуль EUSART

При выполнении передачи туда обратно (back-to-back) в 9-битном режиме (бит TX9D в регистре TXSTA установлен), синхронизация продолжающейся передачи может быть повреждена, если бит TX9D (для следующей передачи) не записан сразу же после установки TXIF. Это происходит из-за того, что любая запись в регистр TXSTA приводит к сбросу генератор скорости передачи (BRG), что повлияет на любую выполняющуюся передачу.

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

Загружайте TX9D сразу же после того, как установился TXIF, отслеживая этот момент либо опрашивая TXIF, либо записывая TX9D в начале подпрограммы обработки прерывания. Либо записывайте TX9D только когда не выполняется никакой передачи (TRMT = 1).

Устройства, для которых актуальна эта проблема

Все разрабатываемые и выпускаемые устройства.

27. Модуль EUSART

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

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

Нет.

Устройства, для которых актуальна эта проблема

Все разрабатываемые и выпускаемые устройства.

28. Модуль EUSART

При использовании возможности автопробуждения, включаемой установкой бита WUE (BAUDCON<1>), бит RCIF (PIR<5>) будет устанавливаться по переходу с низкого уровня на высокий на выводе RX. Однако бит WUE нельзя сбросить в течение интервала 1 TCY перехода с низкого уровня на высокий на выводе RX. Пока бит WUE установлен, чтение приёмного буфера RCREG не сбросит флаг прерывания RCIF. Поэтому ожидание первой возможности для автоматического сброса RCIF чтением RCREG может занять больше времени, чем предполагается.

Примечание: RCIF можно сбросить только чтением RCREG.

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

Возможны два решения проблемы:

1. После того как произошло событие пробуждения, сбросьте бит WUE программно перед тем как выполнить чтение из приёмного буфера RCREG.

2. Опрашивайте бит WUE и считывайте RCREG после автоматического сброса бита WUE.

Устройства, для которых актуальна эта проблема

Все разрабатываемые и выпускаемые устройства.

29. Модуль EUSART

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

Эта ситуация может наблюдаться только когда содержимое передающего буфера TXREG передаётся в TSR во время передачи стоп-бита. Чтобы возникла такая ситуация, должны произойти три события в течение одного и того же командного цикла:

- осуществляется запись в TXREG;

- переполняется счётчик скорости передачи (в конце битового периода);

- передаётся стоп-бит (выдвигается из TSR).

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

Если возможно, не используйте возможность двойной буферизации. Вместо этого загружайте регистр TXREG, когда бит TRMT (TXSTA<1>) установлен, указывая, что TSR пуст.

Если используется двойная буферизация и выполняется передача туда-обратно, тогда загружайте TXREG сразу же после того, как установился бит TXIF, или ждите время одного бита после установки TXIF. Оба решения предотвращают запись в TXREG во время передачи стоп-бита. Заметьте, что TXIF устанавливается в начале передачи стоп-бита.

Если передача выполняется не постоянно, тогда выполняйте следующие действия:

- перед загрузкой TXREG дожидайтесь, когда установится бит TRMT.

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

Устройства, для которых актуальна эта проблема

Все разрабатываемые и выпускаемые устройства.

30. Reset (Сброс)

Эта версия микросхемы не поддерживает функциональность, описанную в Примечании 1 к параметру D002 в Разделе 27.1 "Статические характеристики: напряжение питания" технического описания на устройство. Содержимое ОЗУ может быть изменено в течение сброса, если выполняются следующие условия:

- устройство осуществляет доступ к ОЗУ.

- асинхронный сброс (т.е. WDT, BOR или ) происходит во время выполнения операции записи (начало цикла Q4).

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

Нет.

Устройства, для которых актуальна эта проблема

Все разрабатываемые и выпускаемые устройства.

31. Модуль ECAN

При определённых условиях первые пять битов передаваемого идентификатора могут не соответствовать значению, находящемуся в регистре идентификатора передающего буфера, TXBxSIDH. Если периферия ECAN обнаруживает начало кадра (Start-of-Frame - SOF) в третьем бите межкадрового интервала, и если сообщение, которое должно быть передано, ожидает передачи, первые пять битов передаваемого идентификатора могут быть повреждены.

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

Нет.

Устройства, для которых актуальна эта проблема

Все разрабатываемые и выпускаемые устройства.

32. Модуль ECAN

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

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

Используйте биты REQOP (CANCON<7:5>) для выбора нормального режима в качестве промежуточного шага для переключения из режима прослушивания в режим настройки.

Устройства, для которых актуальна эта проблема

Все разрабатываемые и выпускаемые устройства.

33. Модуль ECAN

При определённых условиях регистр TXBxSIDH ожидающего передачи сообщения может повредиться. Чтобы это произошло, должны возникнуть следующие условия:

1. Передаваемое сообщение ожидает передачи.

2. Все приёмные буферы полные и в буфере сборки сообщения MAB находится принятое сообщение.

3. Чтобы произошло событие повреждения TXBxSIDH, приёмный буфер должен быть сделан доступным (RXBnCON установлен в "0") либо когда на шине CAN распознано начало кадра (SOF), либо в командном цикле перед началом кадра. Синхронизация этого события критична.

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

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

Сегмент символического кода в Примере 6 демонстрирует, как отключить ожидающую передачу. Этот код приводится только для иллюстрирования.

Пример 6

If (RXBnOVFL == 1) // Произошло переполнение?
 {
 If (TXREQ == 1) // Имеется ожидающее передачи сообщение?
 {
 TXREQ = 0; // Сбросить запрос передачи
 If (TXABT == 1) // Сохранить значение состояния прерванной передачи
 MyFlag = 1;
 }
 }
Temp_RXREG = RXBx; // Прочитать приёмный буфер
If (MyFlag) // Предыдущая передача была прервана?
 {
 TXREQ = 1; // Установить запрос передачи
 MyFlag = 0; // Сбросить сохранённое состояние прерванной передачи
 }

История ревизий

Ревизия A

Первая ревизия этого документа, включает проблемы 1 - 9 (ECCP), 9 (ECCP и CCP), 10 - 12 (Timer1/Timer3), 13 (Timer1), 14-20 (MSSP), 21 (АЦП), 22 (Статические характеристики - BOR), 23 (BOD/HLVD), 24 (Прерывания), 25 - 28 (EUSART), 29 (Сброс) и 30 - 32 (ECAN).

Ревизия B

Обновлены проблемы 21 (MSSP) и 32 - 33 (ECAN).



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

Категория: Мои статьи | Добавил: MAS (25.11.2012)
Просмотров: 589 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Категории раздела
Мои статьи [51]
Справочные данные [165]
Справочные данные
Наш опрос
Оцените мой сайт
Всего ответов: 30
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Баннер
$$
Друзья сайта
  • Спортсменам
  • Огородникам СЮД(А
  • Строим вместе
  • Мир развлечений
  • Кто хочет похудеть
  • Здоровье у нас одно
  • Юмор
  • Кулинарные рецепты
  • Картинки_Заставки_Демотивоторы
  • Семья
  • Кто на мальчишник
  • Металлообработка
  • Кто на девишник
  • Блоки питания
  • Смерть соседям
  • Радиомедведь
  • Кибермедведь
  • Радиосайт
  • Деревообработка
  • Поиск