Решение проблем с программированием микроконтроллеров STC Печать
Добавил(а) microsin   

Микроконтроллер STC использует для программирования последовательный интерфейс ISP. Это очень удобно, потому что для программирования не нужно никакое специальное оборудование, кроме простого переходничка USB - COM TTL (наподобие дешевых, продающихся на AliExpress адаптеров на чипе CH340T). Однако в зависимости от квалификации и опыта пользователя при загрузке программ могут возникать разные проблемы.

При возникновении каких-либо проблем с прошивкой через последовательный порт обычно используют метод последовательной замены отдельных составляющих системы программирования, пока не будет получен положительный результат. Т. е. сначала пробуют заменить программируемый микроконтроллер, затем если ничего не поменялось, то проверяют питание микроконтроллера, сигналы RXD и TXD, пробуют заменить переходничок USB - COM TTL, пробуют другой шнур USB, пробуют другой порт USB компьютера и т. п. После того, как после замены проблема исчезла, становится ясна причина ошибки.

Для тестирования рекомендуется использовать следующую стандартную платформу: стандартный последовательный COM-порт (это обычный 9-пиновый разъем папа на задней стенке компьютера), 32-битная Windows XP (64-битная версия может быть недостаточно совместимой), оригинальный чип MAX232 (SP232) и самая простая платка с установленным микроконтроллером STC, на который подано питание.

Примечание: для программируемого устройства, которое использует питание 3.3V, вместо MAX232 нужно применить MAX3232. Имейте в виду, что некоторые облегченные версии Windows XP могут работать неправильно с утилитой программирования STC-ISP, поэтому используйте полные версии Windows.

[Программатор]

Для программирования используется утилита STC-ISP [5]. Для программирования собирается простейшая схема, на примере микроконтроллера STC15W404AS:

                    STC15W404AS
                 |               |
  +5V ------12---x VDD           |
                 |           TXD |---16----> к RXD адаптера USB - TTL UART
  GND ------14---x VCC       RXD |---15----< к RXD адаптера USB - TTL UART
                 |               |
                 +---------------+

Вот так может выглядеть этот программатор:

STC ISP simple programmer

Для других микроконтроллеров STC схема программирования строится по аналогии: ножка приема RXD (P3.0) соединяется с сигналом передачи адаптера USB-UART, ножка передачи TXD (P3.1) соединяется с сигналом приема адаптера USB-UART. На выводы земли и питания микроконтроллера подается питание +3.3V или +5V, которое можно взять от того же адаптера USB-UART.

Как программировать:

1. Запустить stc-isp, выбрать STC15W404AS, Min Baud 2400, Max Baud 115200.

2. Для проверки соединения с микроконтроллером можно нажать кнопку Check MCU.

3. Передернуть питание +5V микроконтроллера (на фотографии это красный провод, т. е. его надо отсоединить и снова подсоединить). Соединение с микроконтроллером будет установлено, и утилита STC-ISP выдаст соответствущее сообщение.

Checking target MCU ... 
  MCU type: STC15W404AS
  F/W version: 7.2.5T
 
Current H/W Option:
  . Current system clock source is internal IRC oscillator
  . IRC frequency: 11.987MHz
  . Oscillator gain is HIGH
  . Wakeup Timer frequency: 36.800KHz
  . Do not detect the level of P3.2 and P3.3 next download
  . Power-on reset, use the extra power-on delay
  . RESET pin behaves as I/O pin
  . Reset while detect a Low-Voltage
  . Thresh voltage level of the built-in LVD : 2.66 V
  . Inhibit EEPROM operation under Low-Voltage
  . CPU-Core supply level : 2.79 V
  . Hardware do not enable Watch-Dog-Timer
  . Watch-Dog-Timer pre-scalar : 256
  . Watch-Dog-Timer stop count in idle mode
  . Program can modify the Watch-Dog-Timer scalar
  . Do not erase user EEPROM area at next download
  . Do not control 485 at next download
  . Do not check user password next download
  . TXD is independent IO
  . TXD pin as quasi-bidirectional mode after reset
  . P2.0 output HIGH level after reset
  . Testing time: 2017-6-6
 
  . MCU type: STC15W404AS
  F/W version: 7.2.5T
 
 
  Complete !(2019-10-20 10:43:49)

STC ISP with STC15W404AS example

4. Для программирования выбрать прошиваемый HEX-файл кнопкой Open Code File.

5. Кликнуть на кнопку Download/Program, после этого передернуть питание +5V. Файл будет записан во FLASH-память микроконтроллера, утилита STC-ISP выдаст соответствующее сообщение.

Checking target MCU ... 
  MCU type: STC15W404AS
  F/W version: 7.2.5T
 
Current H/W Option:
  . Current system clock source is internal IRC oscillator
  . IRC frequency: 11.081MHz
  . Oscillator gain is HIGH
  . Wakeup Timer frequency: 36.800KHz
  . Do not detect the level of P3.2 and P3.3 next download
  . Power-on reset, use the extra power-on delay
  . RESET pin behaves as I/O pin
  . Reset while detect a Low-Voltage
  . Thresh voltage level of the built-in LVD : 2.66 V
  . Inhibit EEPROM operation under Low-Voltage
  . CPU-Core supply level : 2.79 V
  . Hardware do not enable Watch-Dog-Timer
  . Watch-Dog-Timer pre-scalar : 256
  . Watch-Dog-Timer stop count in idle mode
  . Program can modify the Watch-Dog-Timer scalar
  . Do not erase user EEPROM area at next download
  . Do not control 485 at next download
  . Do not check user password next download
  . TXD is independent IO
  . TXD pin as quasi-bidirectional mode after reset
  . P2.0 output HIGH level after reset
  . Testing time: 2017-6-6
 
  . MCU type: STC15W404AS
  F/W version: 7.2.5T
 
Adjusting frequency ...			[1.125"]
Adjusted frequency: 11.987MHz (-0.110%)
 
Re-handshaking ... Successful			[0.125"]
Current Baudrate: 115200
Erasing MCU flash ...  OK !		[0.328"]
MCU ID : F51E01F8360FF3
Programming user code ... OK !		[0.813"]
Programming OPTIONS ... OK !		[0.047"]
 
H/W Option upgrade to:
  . Current system clock source is internal IRC oscillator
  . IRC frequency: 11.987MHz
  . Oscillator gain is HIGH
  . Do not detect the level of P3.2 and P3.3 next download
  . Power-on reset, use the extra power-on delay
  . RESET pin behaves as I/O pin
  . Reset while detect a Low-Voltage
  . Thresh voltage level of the built-in LVD : 2.66 V
  . Inhibit EEPROM operation under Low-Voltage
  . CPU-Core supply level : 2.79 V
  . Hardware do not enable Watch-Dog-Timer
  . Watch-Dog-Timer pre-scalar : 256
  . Watch-Dog-Timer stop count in idle mode
  . Program can modify the Watch-Dog-Timer scalar
  . Do not erase user EEPROM area at next download
  . Do not control 485 at next download
  . Do not check user password next download
  . TXD is independent IO
  . TXD pin as quasi-bidirectional mode after reset
  . P2.0 output HIGH level after reset
 
  . MCU ID : F51E01F8360FF3
  . MCU type: STC15W404AS
  F/W version: 7.2.5T
 
  . Set frequency: 12.000MHz
  . Adjusted frequency: 11.987MHz
  . Trim error: -0.110%
 
 
  Complete !(2019-10-20 09:42:30)

[Общие советы]

1. Сначала проверьте минимально необходимые соединения, отсутствие коротких замыканий, висящих проводов и плохих контактов. Специальное замечание: при клике на кнопку "programming" микроконтроллер должен сократить время холодного старта.

2. Проверьте напряжение питания программируемого микроконтроллера STC, оно должно быть стабильным, без помех, не слишком низким и не слишком высоким. Серия F использует напряжение питания 5.0V, серия L 3.3V, серия W использует широкий диапазон напряжений 3.3-5.0V).

3. Попробуйте загрузить прошивку, снизив скорость подключения STC-ISP (baud rate), и настройте минимальную и максимальную скорости на одинаковое значение (например, выберите 4800 bps).

4. Проверьте перемычки выбора загрузки (last download option), обычно это выводы P1.0/P1.1 (для серии 15F это выводы P3.2/P3.3).

5. Проверьте, что в последний раз в STC-ISP не была выбрана опция загрузки с расчетом на внешний кварцевый резонатор. Если это было сделано, но кварцевый резонатор не подключен, то схема не будет работать.

6. Проверьте, не влияют ли внешние цепи на сигналы загрузки. Например последовательный порт RS485 может пересекаться сигналами с другими схемами.

7. Проверьте правильность установки задержки загрузки в STC-ISP (download delay), рекомендуется выбрать "use a longer power-on reset delay".

8. Проверьте работу схемы преобразователя уровней RS232. Например, система с питанием 3.3V требует конвертера MAX3232, пожалуйста используйте для этого качественные чипы. Самодельные схемы преобразователя уровней, например [4], могут работать нестабильно. Если Вы используете переходничок USB - COM TTL на чипе наподобие CH340T, то преобразователь уровней RS232 не нужен.

9. Если Вы используете кабель с переходником USB - COM TTL, то убедитесь в его качестве. Рекомендуется использовать переходник на чипе CH340T, с возможностью переключения уровней TTL 3.3V/5V. Чипы PL2302 могут быть контрафактными, или для него может понадобится найти правильный драйвер, так как последняя версия драйвера может работать не лучшим образом.

10. Иногда через кабель USB и сигналы RxD/TxD на микроконтроллер подается паразитное питание, не позволяющее полностью его выключить (это требуется для правильного входа в режим загрузки). В этом случае попробуйте последовательно с сигналами RxD, TxD подключить по резистору 1 кОм, чтобы гарантировать полное выключение SCM и выполнение холодного старта. Имейте в виду, что если будет выключено питание не у микроконтроллера STC, а у чипа USB, то подключение к последовательному виртуальному COM-порту USB будет потеряно, что потребует повторного подключения кабеля USB с перезапуском утилиты.

11. Для чипов STC15F104E/204E старого выпуска (до даты 18.10.2010) используйте STC-ISP V1.06, последующие версии чипов рекомендуется использовать с STC-ISP V6.53 и более высокой версии. STCISP V4.83/V4.88 рекомендуется использовать только для ранних оценочных плат. Т. е. если ничего не получается, есть смысл поиграться с версией утилиты STC-ISP.

13. В случае, когда подстраиваемая частота STC 15 Series MCU слишком высокая, превышающая номинальное значение (например 40 МГц), может произойти ошибка таймаута. При программировании выберите модель чипа с самой высокой регулируемой тактовой частотой 25 МГц и 35 МГц, и т. д. Не применяйте в своих устройствах чрезмерно повышенную частоту (overclocking).

14. Чип может быть поврежден, или он может быть бракованный. Повреждение чипа может произойти из-за перегрузки по току (overcurrent), перегрузки по напряжению (overvoltage), из-за ошибки потери кода (ISP CODE loss) и по другим разным причинам. В этом случае поможет замена чипа и повторное программирование.

[Устранение типовых проблем с программированием через ISP]

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

1. Не работает STC-ISP V4.83 для программирования ATMEL AT89S52. Решение: STC-ISP может использоваться только для программирования STC, для программирования микроконтроллеров других производителей используйте соответствующие программаторы.

2. При загрузке STC12C5A60S2 утилита STC-ISP выводит сообщение "Detecting microcontroller ...". Решение: при проверке напряжения питания оказалось, что оно на уровне 4.25V. Для этого питания использовался порт USB, и на шнуре питания падало значительное напряжение. Замена некачественного кабеля USB подняло напряжение до 4.85V, в результате проблема исчезла.

3. STC-ISP V4.83 + STC official download board (V3.0). При загрузке STC12C5A60S2 ничего не происходит. Решение: пользователь ошибочно установил перемычку переключения питания в положение 3.3V, в результате чего на микроконтроллер подавалось недостаточное для загрузки напряжение питания. После переустановки перемычки в положение 5V загрузка прошла успешно.

4. Некоторые пользователи STC12C5A60S2 смогли записать программу однократно, и повторные попытки перепрограммировать чип заканчивались неудачей. Решение: минимальная пользовательская система не использовала кварцевый резонатор для тактирования, но в утилите STC-ISP при программировании была выбрана опция "использовать при следующем включении питания кварцевый резонатор" (next time you use an external crystal). Из-за этой ошибки микроконтроллер не мог получать тактирование, и поэтому не только программа не работала, но и невозможно было перепрограммировать микроконтроллер. Чтобы решить проблему, подключите кварцевый резонатор (или подайте частоту тактов от внешнего генератора) к ошибочно сконфигурированному микроконтроллеру, после чего его снова можно будет перепрограммировать.

5. Такой же случай, STC12C5A60S2 программируются однократно. Это выглядит так, как будто чипы OTP, либо их память FLASH некачественная. Решение: при загрузке в утилите STC-ISP выберите опцию "next cold start P1.0/P1.1 0/0 before downloading" (при следующем холодном старте загрузке проверять P1.0/P1.1 перед загрузкой кода), но не подтягивайте к лог. 0 эти выводы. Замечание: аккуратно выбирайте в утилите STC-ISP опции загрузки, нужно понимать назначение каждого параметра, чтобы сделать правильный выбор.

6. Кристалл STC15F2K61S2, но при загрузки в утилите STC-ISP не получается найти подходящую модель чипа, использование IAP15F2K61S2 приводит к выдаче сообщения "model error". Решение: после консультации с производителем выяснилось, что ранняя модель чипа была напечатана неправильно, должно быть STC15F2K60S2. Выберите эту модель, и загрузка пройдет нормально.

7. STC12C5A32S2 на некоторых 51-платах разработки загружаются нестабильно. Для надежной загрузки приходится выбирать очень низкую скорость работы последовательного порта. Иногда снижение скорости приводит к невозможности загрузки, утилита сообщает о невозможности найти микроконтроллер (unable to find microcontroller), хотя последняя записанная в микроконтроллер программа автоматически успешно запускается. Решение: SCM может работать в самой минимальной системе без всяких проблем. Проведите исследования методом замены, и найдите конфигурацию оборудования, при которой загрузка проходит успешно. Чаще всего проблема заключается в некачественной работе, преобразователя уровня сигналов RS232. Старые чипы MAX232 (в корпусе DIP, иногда устанавливаемые в сокет) могут работать некачественно, замените их на SP3232. Еще одна причина - слишком маленькие конденсаторы в схеме чипа MAX232, что приводит к подобным отказам. Рекомендуется использовать оригинальные, официальные платы разработки от STC в качестве оценки минимальной рабочей системной платформы, а также качественные переходники USB - COM TTL для организации связи с портом UART микроконтроллера в целях его программирования.

8. Стандартная плата разработки STC с микроконтроллером IAP15F2K61S2 не отвечала на попытки программирования. Решение: при проверке оказалось, что допущена глупая ошибка - перепутаны между собой сигналы RXD, TXD (P3.0/P3.1). После исправления соединений загрузка прошла успешно.

9. Пользователь STC15F104E успешно их программировал до определенного момента, пока не появилась новая партия чипов. После этого скорость загрузки резко упала. Решение: исследования показали, что параметры чипов оставались в пределах допустимых по даташиту, но некоторые отличия требовали изменения опций загрузки (Download Options) утилиты STC-ISP. После выбора в "Download Options" галочки "to use a longer power-on reset delay" загрузка начала работать нормально.

10. Пользователь успешно применял для загрузки свой собственный особенный кабель USB-serial, но с некоторых пор стал получать при загрузке STC15F2K61S2 ошибку, утилита STC-ISP выдавала сообщение "to adjust the frequency is not responding" (нет ответа на подстройку частоты). Решение: был применен метод замены для проверки составляющих системы. Применение стандартного кабеля serial + RS232, перезагрузка компьютера, переустановка драйвера USB-serial позволили решить проблему.

11. После программирования STC12C5A60S2 он перестал отвечать на попытки перепрограммирования, однако если загрузить в STC12C5A60S2 простой легкий тест, то перепрограммирование работает. Решение: причина проблемы была в том, что пользователь применял для прошивки программатор SP300 стороннего производителя вместо загрузки с помощью утилиты STC-ISP. После исследования оказалось, что программатор стирал STC chip ISPCODE (уничтожался из памяти код загрузчика), в результате чего становилась невозможной загрузка через порт UART. Совет: используйте для прошивки микроконтроллера STC стандартное решение на основе утилиты STCISP, не рекомендуется использовать другие программаторы.

12. STC12C5A08S2 не загружается. Решение: исследование показало, что пользователь в утилите STC-ISP выбрал вариант "next cold start using an external crystal" (следующий холодный старт будет использовать кварц), но реальное рабочее окружение использовало сокет для кварца, неаккуратно смонтированный на печатной плате. В результате кварцевый генератор не работал. После перепайки сокета проблема исчезла.

13. Плата собственного изготовления с минимальной конфигурацией (без кварца) на микроконтроллере STC89C52RD+ не давала выполнить загрузку кода. Решение: после проверки оказалось, что используется маломощный, нестабильный источник питания с некачественной фильтрацией. Замена источника питания на источник большей мощности устранила проблему.

14. Загрузка IAP15F2K61S2 останавливается на стадии "are adjusting Frequency". Решение: пользователь применял чип IAP15F2K61S2-25I-PDIP40, максимальная рабочая частота у которого 25 МГц, однако вручную была установлена рабочая частота 40 МГц (OC). Чтобы добиться стабильной работы, используйте номинальную рабочую частоту тактов меньше максимально допустимой.

15. У чипа IAP15F2K61S2 (2013, Package C edition) при загрузке была установлена частота 15 МГц, однако реальная частота оказалась 14.2 МГц (смещение около 10%!). Решение: после консультации с производителем выяснилось, что корректировать ошибку частоты можно только в пределах 0.3%, и некоторые обычно не используемые тактовые частоты могут давать большую погрешность установки частоты. Для нормальной работы используйте общие ряды частот.

16. IAP15F2K61S2 загружается, если тактовая частота превышает 30 МГц, но в будущем при загрузке могут происходить отказы - зависание при отсутствии ответа на стадии "frequency regulation". На следующий день загрузка может нормально пройти на обычной тактовой частоте (меньше 30 МГц). Решение: поздние модели SCM изменили принцип загрузки (positive "BATEA" words) на более стабильный. Семплы версии A, поступившие в продажу, могли работать нестабильно. В последующих семплах версий B, C ошибка была скорректирована.

17. Пользователю нужно запрограммировать чип STC15F104E, но в утилите STC-ISP выпадающее меню SCM Model с кнопкой "Open file" серое, модель зафиксирована на "IAP15F2K61S2", и невозможно прочитать программируемый HEX-файл. Это происходит на некоторых компьютерах, на которых работают Windows XP и Windows 7. Решение: после консультации с клиентом выяснилось, что он использует STC-ISP V6.31 (номер версии отображается в левом верхнем углу окна утилиты). Фактически это специальный релиз утилиты, жестко скомпилированный на "IAP15F2K61S2", со встроенным HEX-кодом. Причина в том, что это была ошибочно выпущенная версия. Переход на STC-ISP последней версии (на тот момент это была V6.57) позволил решить проблему.

18. STC12C2051 с внутренним firmware версии 3.6D при использовании с последней версией STC-ISP V6.57 отказывался загружать код. Выводилось сообщение "this version does not support burning chip" (эта версия не поддерживает прошивку чипа). Решение: используйте для успешного программирования STC-ISP V4.83/V4.88. Примечание: STC-ISP V6.XX не поддерживают некоторые старые модели чипов с малыми номерами версии firmware.

19. Для чипа STC15F12AD в корпусе PDIP40 программатор не находит соответствующую модель кристалла. Причина: эта версия кристалла относится к ранним семплам, предназначенным только для тестирования, не для массового производства. Используйте для её программирования STC-ISP V4.82 (можно загрузить на сайте stcisp.com, пробуйте также STC-ISP ранних версий, которые можно загрузить по ссылке [2]).

20. Плата разработки позволяет загрузить код в STC89C52RC, но при переключении на IAP15F2K61S2 загрузка невозможна. Решение: после проверки оказалось, что использовался не стабильно работающий кабель USB. Замена на качественный кабель с чипом FT232 и загрузкой последних драйверов позволило решить проблему. Примечание: из-за того, что требования к интервалам времени сигналов последовательного порта со стороны STC-ISP очень жесткие, некоторые дешевые кабели USB-serial не удовлетворяют этим требованиям, что приводит к отказам при загрузке.

21. В чип STC15F204EA (корпус SKDIP28) не получается загрузить код (чип не отвечает). Решение: причина была в том, что использовался чип ранней версии (18.10.2010) для загрузки которого нужна утилита STC-ISP V1.06. Скачайте её с официального сайта [2]. Примечание: со старыми и новыми версиями кристаллов могут быть несовместимости с версией STC-ISP, поэтому нужно уделять специальное внимание для применения корректной версии STC-ISP.

22. При попытке загрузки кода в IAP15F2K61S2 выводится сообщение "Download failed". Решение: причина была в использовании STC-ISP V6.39. Для решения подобной проблемы попробуйте загрузить STC-ISP V6.53 (или более новую версию) с официального сайта [2]. Примечание: некоторые новые версии чипа firmware 7.1, 3S и выше также требуют применения новой версии утилиты программирования STC-ISP.

23. Утилита STC-ISP V4.83 не устанавливается на 64-битной версии Windows 7, выводится сообщение "... control is not installed". Решение: из-за того, что STC-ISP поддерживает программирование всего диапазона моделей микроконтроллеров STC, утилита STC-ISP постоянно обновляется, и требуется загрузить её новую версию STC-ISP V6.53 (или более свежую). Примечание: некоторые старые модели микроконтроллеров STC со низким номером версии внутреннего firmware все еще требуют использования утилиты STC-ISP V4.83, для этого её можно загрузить с официального сайта [2]. Для такого случая в среде Windows 7 64-бита используйте установку программ виртуальных операционных систем наподобие VirtualBox [3].

24. Пользователи последовательного порта Bluetooth испытывают проблемы с загрузкой кода в STC12C5A60S2. Решение: причина проблем в том, что утилита STC-ISP требует динамического изменения параметров последовательного порта, что не поддерживается модулем последовательного порта Bluetooth. Используйте стандартные решения последовательного порта для загрузки.

25. Пользователи Linux не могут загрузить код в STC12C5630AD. Решение: в настоящий момент STC пока что для утилиты программирования поддерживают только операционную систему Windows. Вы можете попробовать применить на Linux виртуальную машину Windows XP.

26. При использовании STC-ISP V6.57 не работает загрузка на официальной плате разработчика STC offline download board (V3.0). Решение: STC-ISP V6.XX не поддерживают старые версии плат разработки, используйте STC-ISP V4.83.

27. Не работает загрузка кода в STC12C5630AD (PDIP28). Решение: после проверки оказалось, что используется STC official download download PDIP40 board в качестве стандартной платы, которая не совместима по выводам с PDIP28. Используйте для загрузки другую плату или специальный переходник.

28. При использовании кабеля USB с чипом CP2102 микроконтроллер не отвечает. Решение: проверьте сигналы последовательного порта с помощью осциллографа. Вероятнее всего неправильные интервалы времени или уровни сигналов. Замена кабеля USB на кабель с чипом CH340 приведет к решению проблемы.

29. "Подскажите, как считать прошивку с STC90с54? Не нашел кнопки read." Прочитать flash с помощью STC-ISP нельзя, чтение во встроенном загрузчике изначально не предусмотрено [6].

(C) STCISP.com 2013.05.01-2013.08.19, Email:stcisp@163.com

[Ссылки]

1. STC MCU STC-ISP serial programming failure causes and solutions site:stcisp.com.
2. Technical Support>>Download STC ISP site:stcmicro.com.
3. VirtualBox: виртуальная машина на Windows 8.1 для одного языка.
4Сопряжение микроконтроллера с компьютером без MAX232.
5180316STC-ISP-soft.zip - различные версии утилиты STC-ISP, драйверы.
6. grigorig / stcgal Read flash site:github.com.