ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
24 ноября
51086
Alex03 (12.02.2006 00:17, просмотров: 5203)
CrossWorks + MT-Link (а также J-Link) повышение скорости загрузки на примере LPC2xxx http://upload.caxapa.ru/cw_and_mtlink_speed_up.zip
Я тут добился повышения скорости загрузки флэша с ~3,9kB/s до примерно 25kB/s обогнав раза в полтора виглер (с ним ~16,5kB/s) Способ состоит из 2-х этапов 1. Перевод способа загрузки флэша на загрузку через RAM. 2. Подмена jlinkarm.dll на обёрточную Перевод способа загрузки флэша на загрузку через RAM. В CW есть 2 способа работы с loader-ом - Через ARM debug comms channel (По дефолту для большинства процев) - Через буфер в RAM. Для большинства процев работа идёт через ARM debug comms channel как более быстрый (что не всегда так :) ) Переделать загрузчик на "буфер в RAM" очень просто, в CW для этого всё есть. Я для этого создал отдельный загрузчик LoaderRam.exe 1. Копируем CW_HOME\targets\свой проц_контора\Loader.hzp в CW_HOME\targets\свой проц_контора\LoaderRam.hzp В этом файле - заменяем все "loader_comm.c" на "loader_ram.c" - заменяем все "Loader_MemoryMap.xml" на "LoaderRam_MemoryMap.xml" - заменяем все "Loader.exe" на "LoaderRam.exe" Ну и по желанию имя проекта можно изменить, я заменил "Philips LPC210X Loader" на "Philips LPC210X LoaderRam" 2. Копируем CW_HOME\targets\свой проц_контора\Loader_MemoryMap.xml в CW_HOME\targets\свой проц_контора\LoaderRam_MemoryMap.xml В этом файле добавляем секцию в RAM ".comm_buffer" например так:
    
размер по рекомендации хелпа CW на loader чем больше тем лучше, но в сумме с самим loader-ом он не должен превышать размера RAM проца (или любого проца из семейства для универсальности). Ну и

меняем на

3. Запускаем CW Открываем в нём CW_HOME\targets\свой проц_контора\LoaderRam.hzp Компилим. Должен появиться файл CW_HOME\targets\свой проц_контора\Release\LoaderRam.exe 4. Открываем в CW свой проект В опциях своего проекта Progect Option -> Target устанавливаем Loader File Path в $(StudioDir)/targets/свой проц_контора/Release/LoaderRam.exe Loader File Type в "Ram Loader" Пробуем зашить и... программирование должно пройти, но скорость ~3kB/s :( Как оказалось потому что CW при записи флэша грузит данные в RAM ARM-а не блоками а по одному слову! (хотя например сам loader в RAM закидывают целым блоком) Поэтому едем далее... Подмена jlinkarm.dll на обёрточную 1. Переименовываем CW_HOME\bin\jlinkarm.dll в JLinkARM_orig.dll 2. Копируем в CW_HOME\bin\ обёрточную jlinkarm.dll (в архиве по ссылке) И... вуаля! ~25kB/s Наслаждайтесь! (С) Масяня :) В архиве по ссылке пример всего перечисленного для LPC2ххх Для других процев всё легко переделывается. Моя обёрточная jlinkarm.dll писалась наскоряк в VS .NET 2003 возможно у Вас не прокатят какиенить зависимости и т.д. Поэтому полезно её перекомпилять у себя, к тому же если проц не LPC видимо надо поправить jwrapper.cpp, изменив константы:
#define RAM_RANGE_START_ADDR    0x40000000
#define RAM_RANGE_END_ADDR      0x4FFFFFFF
PS Используя описанный метод Вы действуете на свой страх и риск PPS Дальнейшая модернизация приветствуется PPPS Владельцы оригинальных J-Link-ов, давите на Segger - чё за фигня! :) Почему JLINKARM_WriteDCC() такой медленный! Владельцы лицензионного CW, давите на них! Почему пословно пишут в RAM при программировании флэша через J-Link!