После выхода Keil MDK ARM 4.13a владельцев клонов ULINK2, которых, подозреваю больше, чем владельцев оригинальной версии устройства, постигло большое разочарование - начиная с этой версии MDK не работает с клонированными ULINK2. Это же касается и более новой версии 4.14
Я сегодня столкнулся с этой проблемой, обновив Keil, и вот что получилось из последовавшего за этим надрыва задницы:
Откатиться на более старую версию Keil можно, но в этом случае теряется возможность обновления среды. Не хотелось бы, тем более в новые версии добавлено много полезного. Попробуем разобраться, что же происходит.
Обычно клонированные ULINK2 идут с версией прошивки 1.40, и при подключении такого устройства к новой версии MDK она отказывается с ним работать, предлагая обновить прошивку. Однако, обновление прошивки в клонированных устройствах не работает, Keil что-то там такое намутил с шифрованием. Значит, надо каким-то образом обновить прошивку в клонированном устройстве.
Саму прошивку я нашел, версия 1.41, несмотря на то что декларировалась версия 1.43. Ее можно прошить стандартным способом, через JTAG, однако тут возникает классическая проблема курицы и яйца, или "чем прошить программатор". К счастью, если заглянуть в само устройство, то видно что оно построено на основе МК LPC2148, а как известно, эти МК имеют встроенный бутлоадер на UART0.
Посмотрим, как можно его задействовать. На плате устройства имеется джампер J3, он подключен к ноге 41, то есть к P0.14, которая, как и в оригинальном устройстве подтянута к питанию. Эта нога отвечает за вход в режим ISP, отлично.
Смотрим дальше, и видим нераспаянный джампер J2. Проверяем тестером, он подключен к 19 и 21 ногам, а также земле, значит это и есть USART0. Ноги 19 и 21 толерантны к 5 вольтовому сигналу, что облегчает задачу.
Подключаем к компьютеру USB-UART или COM-UART адаптер, соединяем его с J2 (от МК, сначала земля, потом TX, потом RX), одеваем перемычку на J3, включаем USB в ULINK, устройство входит в режим ISP, и перемычку можно снять. Теперь берем утилиту FlashMagic, и прошиваем приложенный HEX файл. На скорости не больше 19200, указав скорость кристалла 12 мегагерц.
Перезагружаем устройство, отсоединяем UART, и в MDK видим, что версия ULINK2 обновилась до 1.41. Отлично, но только если вы не успели обновиться до MDK 4.14, в этом случае вы ничего не увидите, и вам опять будет предложено обновить прошивку, что традиционно не удастся.
Как быть, если хочется именно MDK 4.14? Путем некоторой возни обнаружил, что можно заменить две dll (ul2arm.dll и ul2cm3.dll) в папке ARM/BIN на версии от 4.13, и все будет нормально работать, во всяком случае пока косяков не обнаружено.