Перейти к содержанию
    

vladisslav

Участник
  • Постов

    8
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный
  1. Я так же начинал, но в моем случае нужно было передавать данные через GPIF с максимальной скоростью, а ОПу судя по всему сотни мегабит в секунду не нужны. Так что можно сделать гораздо проще - обойтись control in/control out трнзакциями + libusb. Получится именно так, как нужно - до выставления/получения данных с порта программа приостановится. Причем достаточно вообще только control in транзакций, так как через wParam+wIndex можно установить 4 8-ми битных порта.
  2. Я использовал v-usb для того, чтобы сделать себе USB-программатор для всяких атмег, spi-флешек и тому подобного. Необходимость возникла так как на новом компе нет LPT, да и скорость через LPT была весьма печальная. Для оперативного обновления прошивки программатора использую avrusbboot немного доработанный для уменьшения размера кода и поддержки чтения FLASH и записи/чтения EEPROM. В моем случае кварц 16MHz, питание 3.3v через 1117, вход в загрузчик по сбросу контроллера кнопкой RESET, подключена к соответствующей ноге. Загрузчик работает идеально, программатор на работе на компе с чипсетом nVidia криво обрабатывает control in транзакции большой длины. Если ограничить 32 байтами - работает нормально. На других компьютерах с процессорами от Intel все в порядке. Модифицированный avrusbboot во вложении. Должно заработать без проблем и на 32 атмеге, только может потребоваться другой скрипт линковки (нужен для обрезания таблицы прерываний, чтобы уместиться в 2Кб). Единственное, что не получилось сделать - обновление загрузчика по USB. Предполагал писать его из основной программы - не вышло :( avrusbboot.2006_06_25.7z
  3. SiLabs IDE - Linux

    Можно естественно. Это обычный 51 контроллер. sdcc и as31 должны справиться. Цитата из datasheet The CIP-51 is fully compatible with the MCS-51TM instruction set. Standard 803x/805x assemblers and compilers can be used to develop soft- ware. Что такое USB debug adapter не знаю, но прошить можно без проблем. Любым программатором, который может дергать двумя выводами с определенными временными задержками (1 с открытым стоком, второй с z-состоянием, attiny45/85 или atmega8/16/и т.д. с v-usb подойдут). Вот официальный документ с подробным описанием протокола прошивки и исходником. http://www.silabs.com/Support%20Documents/...lDocs/an127.pdf
  4. Не нужно изучать команды ядра. Есть keil и sdcc, которые замечательно справляются. Если знаете avr и работали с v-usb, ничего особо сложного. У меня изучение заняло где-то неделю по пол-часа - час вечерами и вчера пол-дня на написание финальной прошивки и программки для хоста. Потом экспериментировал, пытаясь выжать максимальную скорость. Получил 12.51 Мб/с при чтении NAND микросхемы (то есть еще нужно было отсылать команды, ждать готовность), то есть 100.08 мегабит, так что вам подойдет. В сыром режиме 42-46 Мб/с, то есть 330-360 мбит. На самом деле там все очень просто. У меня были проблемы только из-за невнимательного чтения TRM. TRM: http://www.cypress.com/?rID=38232 http://www.cypress.com/?docID=24599 Datasheet: http://www.cypress.com/?rID=38801
  5. Проверил под linux (Linux lucid 3.0.0-19-generic-pae #32~lucid1-Ubuntu SMP Mon Apr 9 18:03:59 UTC 2012 i686 GNU/Linux) Кроме косяка с буфером (я пытался послать 2048 URB за один вызов) и ругани на bInterval==0 в дескрипторе (поставил 1, так странно округлялось до 32768 и тормозило) никаких проблем не обнаружено. Linux ругается на hi-speed устройство с размером bulk endpoint 1024, подключенное к super speed контроллеру так же как и при подключении к hi-speed контроллеру: [ 1959.091020] usb 3-1: new high speed USB device number 12 using xhci_hcd [ 1959.107170] usb 3-1: config 1 interface 0 altsetting 0 bulk endpoint 0x2 has invalid maxpacket 1024 [ 1959.107176] usb 3-1: config 1 interface 0 altsetting 0 bulk endpoint 0x86 has invalid maxpacket 1024 ..... [ 2058.739558] usb 1-1.1.3: new high speed USB device number 10 using ehci_hcd [ 2058.831708] usb 1-1.1.3: config 1 interface 0 altsetting 0 bulk endpoint 0x2 has invalid maxpacket 1024 [ 2058.831713] usb 1-1.1.3: config 1 interface 0 altsetting 0 bulk endpoint 0x86 has invalid maxpacket 1024 Скорость при подключении к hi-speed и увеличении размера bulk endpoint с 512 до 1024 растет с 42.05 Мб/с до 45.99 Мб/с. При подключении к super speed и увеличении размера bulk endpoint с 512 до 1024 скорость увеличивается меньше с 42.52 Мб/с до 44.23 Мб/с. Подключение к hi-speed контроллеру через китайский хаб и длинный удлинитель. Подключение к super speed контроллеру через длинный удлинитель (3 метра). Super speed контроллер ASmedia, VID:PID 1b21:1042. Hi-speed контроллер интегрированный в чипсет Intel Corporation Cougar Point USB Enhanced Host Controller (rev 05).
  6. Имеено это и было причиной неработоспособности флешки. Убрал провода и все нормально читается/пишется.
  7. Пробовал все возможные режимы. Если режим неподдерживаемый, то вообще не отвечают, так что дело в чем-то другом. Пробовал подтянуть CE# резистором к VCC для корректной инициализации при подаче питания - не помогло. Сейчас попробую отпаять шнурок для программирования микроконтроллеров и припаять флешку напрямую до резисторов. Может отраженные сигналы засоряют тактовые импульсы... [
  8. Ситуция такая: сделал на atmega8 простой программатор (1117-3.3 по питанию, прошивка на базе V-USB). AVR шьются и читаются без проблем. Решил попробовать читать/писать spi-флешки, благо есть дохлые ADSL D-linkи и материнки, с которых их можно выпаять. Первая попытка писать/читать 93c48 была успешной, разве что пришлось повозиться из-за 9-ти битного протокола. Потом попробовал Pm25lv040 - писалось/читалось нормально. Вычитал BIOS материнки, стер, записал обратно, проверил. Потом снял с D-link 2500 25x16 и начались проблемы. На команду JEDEC ID (0x9f) Отвечает 0xee,0x40,0x00. Должно быть 0xef,0x30,0x15. На команду id (0x90) Отвечает 0xee,0x06,0xe0,0x6e,0x06,0xe0 и так далее по 24 бита, Должно быть 0x90,0x14,0x90,0x14... Режим записи включить не удается, после команды 0x06 из регистра статуса читается 0x00 вместо 0x02. По команде чтения читается одинаковый мусор, если читать несколько раз подряд, так что не ошибки на шине. Подключил обратно 25lv040 - похожая картина. Ошибки в прошивке и управляющая программа точно не виноваты. Контролировал, что передается по светодиодам, выставив clock 1Hz. Выводится именно то, что передается. Убитые статикой флешки вообще не отвечают ни на одну команду, так что не статика точно. Возможно ли убить флешку до такого состояния какими либо не документированными командами (id вроде хранится в масочном ROM, а не как у AVR, да и на команду включения записи должна реагировать со стертым id)?
×
×
  • Создать...