Arduino Due & Keil

Ynicky
Offline
Зарегистрирован: 30.05.2013
Подарили мне плату "Arduino Due".
До этого я баловался с "Arduino UNO".
Запустил простой проект от UNO на DUE. Все работает.
Но для более серьезной платы захотелось более серьезную среду разработки.
Почитав в интернете, решил воспользоваться Keil-ом.
Поставил версию 4.70.
Создал простой проект. При компоновке, Keil выдавал ошибку о не нахождении
стандартной библиотеки. Оказалось, системная переменная ARMLIB указывала
на другую директорию (осталось от давней среды разработки ARM202U аж 1997 года,
при смене компов все наработанное переустанавливал на новые).
Изменил переменную на нужную директорию. Build стал проходить успешно.
Но при симуляции программа стартовала с 0x0. А у AT91SAM3X8E, как известно, Flash
находится в области с 0x80000. Оказалось, во вкладке Debug в поле Parameter для
симуляции надо к опции -MPU добавить опцию -REMAP. Теперь программа входила куда надо,
т.е в облать Flash (0x80000). Но в окне Command появилось сообщение:
"*** error 65: access violation at 0x400E0A00 : no 'write' permission".
Создал файл "map.ini" со следующим содержанием:
MAP 0x40000000, 0x400FFFFF READ WRITE
Подключил его во вкладке Debug в поле Initialization File для симуляции.
Теперь, наконец-то, симуляция заработала.
Настала пора загрузить программу во Flash и запустить на плате.
На работе нашел у кого-то старый ULINK. Он имеет шлейф с 20-ти контактным
разъемом 2,5 мм. А на "Arduino Due" стоит 10-ти контактный 1,27 мм (JTAG).
Раздобыл шлейф с 1,27 мм разъемом. Сделал переходник.
Попробовал подключиться к Arduino. Разъем не лезет.
Оказалось, не пускает рядом стоящий разъем DEBUG. Аккуратно отрезал часть этого
разъема (будете делать то-же самое - не порежте проводники на плате!).
Теперь разъем вставляется как надо. Тут главное не перепутать выводы.
Ключа в платном разъеме нет. Установил во вкладке Debug точку на использование
Debugger-а. Выбрал ULINK2/ME Cortex Debugger. Перекомпоновал проект и запустил
отладку. Вижу что программа крутится в области памяти со 0x100000 вместо 0x80000.
Долго доходило, что это Boot программа и как-то это связано с битами GPNVM.
Методом тыка выяснил, что в установках отладчика
(вкладка Debug -> Settings -> Debug/Debug) в поле Connect надо выбрать
"with Pre-reset". После этого отладчик входит куда надо (во Flash) и все работает.
Отстыковал отладчик и выключил питание. Выдержал несколько десятков секунд.
Включил питание. Программа не работает. Нажимаю на кнопку Reset - работает.
При выключении всего на несколько секунд - работает без Reset-а.
Создал похожий проект в среде Arduino. Работает при включении питания без
нажатия на кнопку Reset, даже если долго было выключено питание.
Пока с этим не разобрался.
Сделал сложный проект в Keil-е на основе Blinky примера для процессора sam3x8h,
переделав на sam3x8e. Работает аналогично простому примеру. С этим, конечно,
можно мириться, что-нибудь придумав для сброса по включению питания,
но все равно - хотелось бы разобраться.
Если кто-нибудь сталкивался с такой проблемой - поделитесь опытом.
Проект с настройками хотел прилажить, но не знаю как. Архив занимает больше 2 МБ.
 
Николай.
 
P.S.
Не судите строго, если вам все высказанное показалось бредом неуча.
По образованию я не программист, а разработчик.
 
Michal
Michal аватар
Offline
Зарегистрирован: 26.04.2013

во хоть один коллега по Due нашелся, а то все на мегах сидят :)

я в AtmelStudio под Due пишу,в нее нормально ардуиновские бибилотеки встраиваются и есть родные ASF от атмела... прошиваю по USB-кабелю самбой

Ynicky
Offline
Зарегистрирован: 30.05.2013

Конвертанул hex в bin.

Попробовал запрограммировать с помощью bossac.

Не вышло.

To Michal:

А как AtmelStudio?

Отладчик есть? Т.е. точки останова, пошаговое выполнение команд и т.д.?

Николай.

Michal
Michal аватар
Offline
Зарегистрирован: 26.04.2013

в студии есть отладчик по jtag

кнопку Erase, а потом Reset на арудине жмете, а то без этого босак не видит плату

 

Ynicky
Offline
Зарегистрирован: 30.05.2013

Про кнопки то я и забыл. Теперь работает. Но после долгого выключения программа запускается только по кнопке Reset.

 

Michal
Michal аватар
Offline
Зарегистрирован: 26.04.2013

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

Ynicky
Offline
Зарегистрирован: 30.05.2013
Принесли мне отладочную плату CoLinkEx.
Установил драйверы.
Через переходник подключился к Arduino Due.
Настроил проект в Keil на работу с CoLinkEx.
При вызове отладчика выдаются ошибки.
Мол не поддерживается такой процессор (SAM3X8E).
На сайте CooCox выяснил, что поддерживаются только:
Нашел в директории C:\Keil\ARM\BIN\CooCox\devices\Atmel\
настроечные файлы на поддерживаемые процессоры.
По аналогии написал свой файл SAM3X8E.xml:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Device>
<Name>SAM3X8E</Name>
<Vendor>Atmel</Vendor>
<DebugSetting>$TOOLKIT_CONFIG_DIR$\debugger\sam3uxx.xml</DebugSetting>
<Flash>
<Block addr="0x00080000" execute="true" name="Embedded Flash" read="true" size="0x00020000" write="false"/>
<Block addr="0x00100000" execute="true" name="Embedded Flash" read="true" size="0x00020000" write="false"/>
</Flash>
<Ram>
<Block addr="0x20000000" execute="true" name="Embedded SRAM" read="true" size="0x00010000" write="true"/>
<Block addr="0x20080000" execute="true" name="Embedded SRAM" read="true" size="0x00008000" write="true"/>
</Ram>
<FlashLoader><loader select="true">$TOOLKIT_FLASH_DIR$\ATSAM3X_512.FLM</loader></FlashLoader></Device>

Настроил Keil как показано ниже.

 
Все заработало.
 
Николай.
 
 
 
Ynicky
Offline
Зарегистрирован: 30.05.2013

На всякий случай положу сюда мои наработки с кабелем.

SAM3X8E.xml:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Device>
<Name>SAM3X8E</Name>
<Vendor>Atmel</Vendor>
<DebugSetting>$TOOLKIT_CONFIG_DIR$\debugger\sam3uxx.xml</DebugSetting>
<Flash>
<Block addr="0x00080000" execute="true" name="Embedded Flash" read="true" size="0x00040000" write="false"/>
<Block addr="0x000C0000" execute="true" name="Embedded Flash" read="true" size="0x00040000" write="false"/>
</Flash>
<Ram>
<Block addr="0x20000000" execute="true" name="Embedded SRAM" read="true" size="0x00010000" write="true"/>
<Block addr="0x20080000" execute="true" name="Embedded SRAM" read="true" size="0x00008000" write="true"/>
<Block addr="0x20100000" execute="true" name="IRAM NFC"      read="true" size="0x1000"     write="true"/>
</Ram>
<FlashLoader><loader select="true">$TOOLKIT_FLASH_DIR$\ATSAM3X_512.FLM</loader></FlashLoader></Device>


Ynicky
Offline
Зарегистрирован: 30.05.2013

Сделал еще один кабель к разъему DEBUG(SWD).

Тоже работает.

Николай.