Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Hi-Speed USB
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
toweroff
Пока остановился на интерфейсной микросхеме ISP1582 от NXP
Но есть одна загвоздка - проц _уже_ должен адресовать 64М (16Мх32) флешу
Получается, что эту интерфейсную микросхему придется адресовать как-то хитрее.
В плане формирований управляющих сигналов для флеши поставил CPLD, ячеек лишних там еще много, так что комбинаторику уписать туда можно практически любую.
Можно ли как-то задействовать интерфейс динамической памяти?
Хотелось бы, чтобы для программиста потом все было как можно "прозрачнее", просто флеш в одном диапазоне, интерфейс USB - в другом, без лишнего программного "ногодрыгания"
rezident
У LPC2468 уже есть собственный USB full-speed Device/Host/OTG Controller with 4kB of endpoint RAM. Вам еще один USB-device нужен что ли?
toweroff
Цитата(rezident @ Feb 4 2010, 16:56) *
У LPC2468 уже есть собственный USB full-speed Device/Host/OTG Controller with 4kB of endpoint RAM. Вам еще один USB-device нужен что ли?

в том-то и дело - full speed
я ж в сабже написал - hi-speed надобно
Собственный контроллер в LPC работает замечательно... но медленно для заказчика. Поэтому и возникла необходимость во внешнем контроллере hi-speed USB
VslavX
Цитата(toweroff @ Feb 4 2010, 16:04) *
в том-то и дело - full speed
я ж в сабже написал - hi-speed надобно

AT91SAM3 попробовать не хотите? Там USB HS встроенный. Параллельной внешней шины нет, но я сейчас на NAND-ы с SPI смотрю, может Вам тоже подойдут.
toweroff
Цитата(VslavX @ Feb 4 2010, 18:12) *
AT91SAM3 попробовать не хотите? Там USB HS встроенный. Параллельной внешней шины нет, но я сейчас на NAND-ы с SPI смотрю, может Вам тоже подойдут.

нет, как раз требуется 32-разрядная шина, так бы проблем бы не было, и у LPC есть hi-speed решения
aaarrr
Цитата(toweroff @ Feb 4 2010, 16:43) *
Можно ли как-то задействовать интерфейс динамической памяти?

Едва ли.

Цитата(toweroff @ Feb 4 2010, 16:43) *
Но есть одна загвоздка - проц _уже_ должен адресовать 64М (16Мх32) флешу
Получается, что эту интерфейсную микросхему придется адресовать как-то хитрее.
В плане формирований управляющих сигналов для флеши поставил CPLD, ячеек лишних там еще много, так что комбинаторику уписать туда можно практически любую.

Ну, можно знатно извратиться, выделив некоторую область памяти, где 16-бит обращения идут у ISP, а 32 - к флеш. Или подключать ISP на один цикл шины после записи секретного слова по секретному адресу. В общем, есть варианты.
toweroff
Цитата(aaarrr @ Feb 4 2010, 19:10) *
можно знатно извратиться, выделив некоторую область памяти, где 16-бит обращения идут у ISP, а 32 - к флеш

так все равно нужно что-то отключать от шины... то есть однозначно идентифицировать относительно какого-то сигнала

Цитата(aaarrr @ Feb 4 2010, 19:10) *
Или подключать ISP на один цикл шины после записи секретного слова по секретному адресу.

вроде бы выход, но.. запись во флеш подразумевает относительно хаотичные данные и не факт, что не совпадет с этим magic значением. В результате такое решение не подходит

а может все-таки "ногодрыг"? если аппаратных решений нет
да и выставить уровень на ножке порта дешевле по времени, чем одна операция с внешней шиной...
aaarrr
Цитата(toweroff @ Feb 4 2010, 19:27) *
так все равно нужно что-то отключать от шины... то есть однозначно идентифицировать относительно какого-то сигнала

Вот по BLS и идентифицировать. Другое дело, что работать только 32-х битными словами с флеш может оказаться неудобно, но это надо смотреть по задаче.

Цитата(toweroff @ Feb 4 2010, 19:27) *
а может все-таки "ногодрыг"? если аппаратных решений нет
да и выставить уровень на ножке порта дешевле по времени, чем одна операция с внешней шиной...

Ну, если программист будет достаточно внимателен, то ничего страшного.
toweroff
Цитата(aaarrr @ Feb 4 2010, 20:16) *
Вот по BLS и идентифицировать. Другое дело, что работать только 32-х битными словами с флеш может оказаться неудобно, но это надо смотреть по задаче.

как раз нормально. То есть, если адрес не выровнен до 4, /BLSx как раз и будет тем /CS, через который можно лезть НЕ во флеш?
Кстати - какой BLS? при 16-битном BLS2, при 8-битном любой, но не BLS0? Я так понимаю, BLS0 будет всегда генериться при 32-битной конфигурации EMC?
aaarrr
Фигню я сморозил: способ годится только для записи sad.gif Хотя такую запись можно использовать для временного переключения flash-ISP.
toweroff
Цитата(aaarrr @ Feb 4 2010, 22:12) *
Хотя такую запись можно использовать для временного переключения flash-ISP.

ну с таким же успехом можно и ногой дрыгать

Цитата(aaarrr @ Feb 4 2010, 22:12) *
Фигню я сморозил: способ годится только для записи

ну не совсем, если в выражение впихнуть /OE, /WR, /CSx, /BLSx и A0 с A1
aaarrr
Цитата(toweroff @ Feb 4 2010, 22:24) *
ну не совсем, если в выражение впихнуть /OE, /WR, /CSx, /BLSx и A0 с A1

Совсем: при чтении BLS не используется, а A0 и A1 могут быть в нуле.
Нет, на LPC работа BLS конфигурируется (бит PB в EMCStaticConfig), так что все в порядке.
toweroff
итого итог - ногодрыг все-таки, скорее всего... проще по прерыванию от внешнего контроллера ставить пин в 1, вычерпнуть все и сбросить...
а в основной проге, где работа с флеш, просто на эту тему не заморачиваться
aaarrr
И так, пожалуй, правильно. Делить ресурс по ширине доступа можно, но это все-таки слишком большое извращение.
toweroff
не буду плодить новую тему...
для данного контроллера (LPC2468) скорость передачи по USB со встроенным full-speed в размере 6 Мбит/с нормально, или есть куда развиваться?
сам контроллер, фактически, занимается только тем, что ждет 32Кбайт данные, отсылает подтверждение и снова ждет. Весь блок отсылается во внешнюю flash (или читается оттуда такими же блоками)
имеет ли смысл в таком случае связываться с DMA? С ним дела пока не имел, разбор полетов может занять какое-то время, а пилот выпускать нужно. С hi-speed вопрос решается, но если есть куда "рости" с родным контроллером, то было бы очень неплохо
aaarrr
Цитата(toweroff @ Feb 8 2010, 15:50) *
для данного контроллера (LPC2468) скорость передачи по USB со встроенным full-speed в размере 6 Мбит/с нормально, или есть куда развиваться?

Я, правда, с LPC2468 не работал, но очень сильно сомневаюсь, что он не позволяет оттяпать всю полосу.
Ищите, где у вас тормоза случаются.
toweroff
Цитата(aaarrr @ Feb 8 2010, 15:54) *
Ищите, где у вас тормоза случаются.

а какова методика поиска?
я пользую кейловский пример для mass storage, выкинул оттуда scsi, оставил только bulk.
В прерывании обрабатываются только control и мои две точки, там выставляются флаги. В основной проге жду флага и начинаю выгребать буфер точки или наоборот наполнять
aaarrr
Цитата(toweroff @ Feb 8 2010, 17:06) *
а какова методика поиска?

Сделайте сначала какой-нибудь bulkloop или вообще простейшую "посылалку", посмотрите скорость. Если скорость неудовлетворительная, посмотрите, нет ли тормозов по вине хоста.
sonycman
Цитата(aaarrr @ Feb 8 2010, 19:12) *
посмотрите, нет ли тормозов по вине хоста.

А каким образом, или почему хост может тормозить?
aaarrr
Смотреть, есть ли NAK'и. Хост может тормозить по причине кривизны ПО, на нем запущенного.
toweroff
Цитата(aaarrr @ Feb 8 2010, 18:12) *
Сделайте сначала какой-нибудь bulkloop или вообще простейшую "посылалку", посмотрите скорость. Если скорость неудовлетворительная, посмотрите, нет ли тормозов по вине хоста.

делал... то же самое
попробую хост посмотреть

какими пакетами (какого размера) лучше обмениваться хосту с девайсом? я пересылаю по 32К (сначала команда, потом блок данных, потом ответ от девайса)

и еще, так никто не ответил... в таком режиме, когда проц, фактически, тупо ждет флага от прерывания и выгребает точку, есть ли смысл пользовать DMA?
sonycman
А есть ли у этого LPC механизм двойной буферизации?
С тем, чтобы интерфейс по заполнению конечной точки не простаивал, ожидая, пока обработчик прерывания разгребёт точку, а мгновенно переключался на второй буфер?
toweroff
Цитата(sonycman @ Feb 9 2010, 04:50) *
А есть ли у этого LPC механизм двойной буферизации?
С тем, чтобы интерфейс по заполнению конечной точки не простаивал, ожидая, пока обработчик прерывания разгребёт точку, а мгновенно переключался на второй буфер?

буфер есть, т.к. в user manual работа с ним описана. А вот есть ли он в реализации кейла... сейчас посмотрю...

там все в порядке. Как и предлагается на стр.386-388 LPC2468 User Manual (rev.04 26.08.2009), при завершении чтения из буфера используется команда CMD_CLR_BUF, при завершении записи - CMD_VALID_BUF
обе команды переключают используемый буфер
если оба буфера не вычищены, аппаратно генерится NAK
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.