Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930

Использование FTDI для прошивки AVR через FTD2XX_NET.dll

26.05.2014, 17:40. Показов 2535. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Есть задача написать софт для программирования микроконтроллеров avr (в частности atMega 2561) через программатор на ft232r.
Использую .Net библиотеку FTD2XX_NET.dll под C#.
Получаю не то, что ожидаю, в частности постоянно FF.

Код ниже:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void init()
        {
            stat = ftdiDev.OpenByIndex(0);
            stat = ftdiDev.SetBitMode(0xE0, FTDI.FT_BIT_MODES.FT_BIT_MODE_SYNC_BITBANG); // режим синхронного bit bang            
            outB[0] = 0;
            stat = ftdiDev.Write(outB, 1, ref bToRead); // устанавливаем уровень SCK и RESET в 0
            outB[0] = 0x80;
            stat = ftdiDev.Write(outB, 1, ref bToRead); // устанавливаем уровень RESET в 1
            outB[0] = 0;
            stat = ftdiDev.Write(outB, 1, ref bToRead); // устанавливаем уровень SCK и RESET в 0       
            send((byte)0xAC);   //
            send((byte)0x53);   // переводим контроллер в programming mode
            send((byte)0xFF);   // здесь должны получить эхо 0x53
            Thread.Sleep(20);
        }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        private void send(byte b)
        {
            incom = 0;
            bToRead = 0;
            uint readBytes = 0;
            for (int i = 0; i < 8; i++)
            {
                outB[0] = (byte)(((b << i) & 0x80) >> 1);   // берём нужный бит
                stat = ftdiDev.Write(outB, 1, ref bToRead);        // устанавливаем уровень MOSI
                outB[0] |= 0x20;                            // подготавливаем SCK к установке в 1
                stat = ftdiDev.Write(outB, 1, ref bToRead);        // устанавливаем SCK в 1
                outB[0] -= 0x20;                            // подготавливаем SCK к установке в 0               
                stat = ftdiDev.Write(outB, 1, ref bToRead);        // устанавливаем SCK в 0
                stat = ftdiDev.Read(dump, 1, ref readBytes);       // читаем данные
                addBit(dump[0], 7 - i);                     // добавляем бит MISO в байт данных
                outB[0] = 0;                                
                Thread.Sleep(4);
            }
            WORD.Add(incom);
        }
C#
1
2
3
4
        private void addBit(byte bDump, int pos)
        {
            incom |= (byte)(((bDump & 0x8) >> 3) << pos);
        }
Добавлено через 6 минут
Странный фильтр добавления тем, пришлось пообрезать заголовок и тему, чтобы пропустил.
Прошу помощи у знающих людей. Подозреваю глупую ошибку в какой-нибудь мелочи. Ибо контроллер рабочий, через avrdude шьётся нормально, последовательность действий, вроде, соответствует даташиту на мегу, а при чтении данных линия MISO всегда 1. В итоге получаю байты FF.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.05.2014, 17:40
Ответы с готовыми решениями:

CH341A софт для прошивки AVR по SPI этим программатором
Выкладываю на ваш суд свои модифицированные сборки программ для прошивки с помощью программатора CH341 микроконтроллеров Atmel AVR: 1)...

Использование String Tables в .dll(.dll.mui) (Для VB .NET)
Здравствуйте. Нужно извлечь(а потом запоковать) таблицу строк(string tables ). Допустим есть файл explorerframe.dll.mui из...

Использование микросхем FTDI
Через USB порт чтение данных

9
 Аватар для Витальич
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
26.05.2014, 17:44
stat = ftdiDev.Write(outB, 1, ref bToRead); // устанавливаем уровень SCK и RESET в 0
outB[0] = 0x80;
stat = ftdiDev.Write(outB, 1, ref bToRead); // устанавливаем уровень RESET в 1
outB[0] = 0;
stat = ftdiDev.Write(outB, 1, ref bToRead); // устанавливаем уровень SCK и RESET в
Разве при формировании данных сигналов не должна быть задержка?
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
26.05.2014, 17:53  [ТС]
Витальич, по даташиту - нет, только после сброса перед заданием команды перехода в режим программирования:

1. Power-up sequence:
Apply power between VCC and GND while RESET and SCK are set to “0”. In
some systems, the programmer can not guarantee that SCK is held low during
power-up. In this case, RESET must be given a positive pulse of at least two
CPU clock cycles duration after SCK has been set to “0”.

2. Wait for at least 20 ms and enable serial programming by sending the Programming
Enable serial instruction to pin PDI.

Добавлено через 7 минут
Вернее задержка должна быть, но реакция ОС явно медленнее, чем 2 цикла CPUclk, пробовал увеличивать задержку, результата не принесло.
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
29.05.2014, 10:45  [ТС]
Решил проблему проверив линии осциллографом.
Во-первых, читать состояние линии MISO надо в момент установки SCK в 1, а не в 0.
Во-вторых, команда чтения данных из FT232rl возвращает ересь. Использовал команду чтения состояния линий, формировал байт из состояний MISO и получил то, что ожидал.
Тема закрыта.

Добавлено через 8 минут
) ещё не всё.
Выяснилось, что команда чтения таки возвращает нужные данные, но есть один нюанс.
После каждой команды записи независимо от того хотим мы знать ответ или нет необходимо производить чтение, чтобы очистить буфер приёма, что несколько замедляет работу.
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
29.05.2014, 20:28
Code
1
function FT_Purge(ftHandle:Dword;Mask:Dword) : FT_Result ; stdcall ; External FT_DLL_Name name 'FT_Purge';
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
30.05.2014, 09:26  [ТС]
raxp, тоже вариант, но мне, в принципе не нужно значение буфера, для моей задачи достаточно видеть состояние линий.
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
30.05.2014, 16:05
...так тут оно и не читается, а очищается. Всего лишь поднятый флаг. И да, если FTDI -ка у вас создает вдруг виртуальный COM порт, то дергать и отслеживать состояние линий вы можете напрямую через WinAPI.
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
02.06.2014, 09:32  [ТС]
К сожалению, тема ещё не закрыта.
Появился следующий вопрос:
прошивка контроллера хранится в файле формата intel-hex. В файле присутствуют команды смещения сегмента.
Надо ли их учитывать при формировании загружаемых страниц прошивки или байты загружаются последовательно, без привязки к их адресу в hex-файле?
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
02.06.2014, 09:50  [ТС]
Прошивка контроллера хранится в файле формата Intel Hex. В файле есть команды смещения сегмента. Эти команды надо учитывать при формировании записываемой страницы или все байты данных записываются последовательно?

Не по теме:

Этот вопрос задавал в другом топике, но тема поднятая в нём уже закрыта. Следуя правилу один вопрос - одна тема, создаю новую тему.

0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
02.06.2014, 19:04
Не увидел ни одной закрытой у вас темы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.06.2014, 19:04
Помогаю со студенческими работами здесь

Использование String Tables в .dll(.dll.mui) (Для C#)
Здравствуйте. Нужно извлечь(а потом запоковать) таблицу строк(string tables ). Допустим есть файл explorerframe.dll.mui из...

Использование C++ DLL через kernel32
функция DLL: int __stdcall Test() { return 2; } Пробую вызвать из C#: static extern IntPtr LoadLibrary(string...

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

Использование AVR TWI для работы с шиной IIC
Здравствуйте. Рассматривал &quot;AVR. Учебный Курс. Использование AVR TWI для работы с шиной IIC (y2s)&quot;. Довольно емкая статья. И решил...

Смена прошивки AVR контроллеров с Андроид устройств по BT
Привет, хлопцы! Кто нибудь видел бутлоадеры, умеющие работать с софтом, который крутиться на Андроиде? По блютусу (UART). И есть ли у...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru