-
- Поковырять исходники FlashROM? SPI-флешки он бодро программирует. Toчкa oпopы(1 знак., 26.01.2022 14:01, ссылка)
- Рапортую: выкинул ftdi, достал из тумбочки Versaloon. Он много чего
умеет в том числе USB-XXX (i2c, spi, gpio, adc ...). С ним цикл
чтения одиночного байта по произвольному адресу составляет 2мс и
это с проверкой nak (быстрее на fs usb не сделать никак). А еще он
умеет делать несколько операций за одну usb тразакцию. Скорость
правда выше 100КГц не ставит и с егойным фреймворком я 1,5 дня
мудохался пока разобрался. Документации нет никакой. - 3m(26.01.2022 13:09)
- CH341A довольно шустро i2c/spi флешки шьёт, о скорости не скажу. - m16(26.01.2022 13:23)
- А если взять FT260S? Evgeny_CD(1 знак., 21.01.2022 22:45, ссылка)
- Какую библиотеку (есть mpsse от ftdi, есть от Craig Heffner и т.д.)
используете, какую ОС и какой драйвер? Обычно проблема, что каждая
транзакция делится на части, например передача 10 байт - это
отдельно передача команды старт, потом передача адреса, потом приём
ACK, передача 10 байт (после каждого читается ACK) и приём стоп в
конце - т.е. примерно 25 отдельных посылок в mpsse по USB. Так вот,
каждая такая отдельная посылка может отправляться не чаще, чем раз
в 1мс. Если arhiv6(325 знак., 21.01.2022 21:00)
- Библиотека и дрова с сайта ftdi, ос - десятка, софт пишу под minGW.
Да, происходит именно так как вы пишете: транзакция делится на
части и между частями паузы по 5-15 мс. ACK нужен. Удалось ускорить
только блочное чтение но оно в софте используется крайне редко.
Овердофига чтений по 1 байту а при этом по шине две тразакции :( 3m(107 знак., 22.01.2022 09:20)
- На сайте ftdi есть разные библиотеки. Например, libmpsse из AN_177
судя по коду для формирования СТАРТ отправляет одну транзакцию +
для отправки АДРЕСа отдельную транзакцию. А простой и топорный
пример из AN_113 отправляет всего одну транзакцию, когда в буфере
накопится и СТАРТ и АДРЕС, т.е. будет быстрее. С libmpsse от Craig
работал давно и только с SPI. Сейчас глянул код v1.3 с googlecode,
там для i2c СТАРТ формируется побитно за несколько транзакций, т.е.
точно arhiv6(348 знак., 22.01.2022 11:28, ссылка, ссылка)
- Спасибо за наводку. - OldHobo(26.01.2022 18:13, )
- На сайте ftdi есть разные библиотеки. Например, libmpsse из AN_177
судя по коду для формирования СТАРТ отправляет одну транзакцию +
для отправки АДРЕСа отдельную транзакцию. А простой и топорный
пример из AN_113 отправляет всего одну транзакцию, когда в буфере
накопится и СТАРТ и АДРЕС, т.е. будет быстрее. С libmpsse от Craig
работал давно и только с SPI. Сейчас глянул код v1.3 с googlecode,
там для i2c СТАРТ формируется побитно за несколько транзакций, т.е.
точно arhiv6(348 знак., 22.01.2022 11:28, ссылка, ссылка)
- Библиотека и дрова с сайта ftdi, ос - десятка, софт пишу под minGW.
Да, происходит именно так как вы пишете: транзакция делится на
части и между частями паузы по 5-15 мс. ACK нужен. Удалось ускорить
только блочное чтение но оно в софте используется крайне редко.
Овердофига чтений по 1 байту а при этом по шине две тразакции :( 3m(107 знак., 22.01.2022 09:20)
- не совсем понятна топология. допустим usb-i2c выступает мастером и общается со слейвом. обычно используют i2c standart mode 100 kHz. для работы в fast mode 400 kHz требуется мастер, который умеет работать на такой скорости и слейв, который тоже должен понимать fast mode. еще полезно осциллом глянуть scl/sda на предмет фронтов. если затянутые, то можно попробовать уменьшить пуллап резисторы, с типичных 10 кОм до 4к7 и даже 2к2. чтобы отсечь возможные проблемы с тормозами jury093(199 знак., 21.01.2022 19:09, )