Хочу купить простую плату SK-MLPC2368 и создать на её основе USB 2.0 устройство, но хотел сначала посоветоваться с кем-нибудь :). До этого делал лишь USB 1.1 на атмеге.
Задача достаточно проста в теории... :)
Мне нужно подключить к плате микроновский CMOS сенсор MT9M001 и примерно раз в секунду скачивать картинки (не поток, одиночные кадры) по USB. Сенсор очень простой, его тактируешь, он гонит данные, управляется по i2c... Как это сделать на атмеге я представляю, но её скорости не хватит для потока от сенсора.
Сенсор тактируется на частоте до 48МГц (к сожалению, нигде не могу найти упоминания о минимальной частоте, так как скорость как раз не требуется), соответственно, льёт 10 бит данных с этой самой частотой.
Не решая за меня задачу, подскажите плиз, подойдёт ли платка на этом ARM7 (с армами я пока знаком только в теории)? Я б ещё хотел в перспективе подключить 4 сенсора к плате, но это уже совсем далёкие планы.
У LPC2368 хоть и USB2.0, но поддерживает только full-speed (12Mb/s).
В документации на стр.29 пишут, что 1 МГц.
Спец. интерфейса для этого у него нет, если делать "ногодрыжеством" то на 1МГц может и успеет (с портами вв он работает не за один такт). 4 сенсора думаю точно не успеет.
Вообще LPC2368 уже устарел, на замену ему идет LPC1768.
У AT91SAM9260/AT91SAM9XE512/AT91SAM9G45 есть аппаратный интерфейс для CMOS сенсоров, но это уже не совсем микроконтроллеры...
update
А ведь картинка польностью в память LPC2368 не лезет, значит нужно ее передавать не приняв полностью. Если частота и правда не должна никогда быть меньше 1МГц и ее нельзя останавливать (с CMOS сенсорами никогда не работал), то ничего не получится.
Огромное (!) спасибо за подробный ответ.
Нашёл строчку в даташите, Вы правы, заявлен минимум в 1МГц и максимальный Input clock period = 20.83ns.
Я пытаюсь повторить, точнее сделать лучше и дешевле простую астрокамеру на Cypress CY7C68013A+MT9M001 (для начала). Как я понимаю, проц просто получает данные с камеры в свой FIFO, по прерываниям заполнения буфера шлёт его по USB high-speed. Стало быть, этот арм мне не особо годится..., раз не может делать что-то похожее, требуя полного своего участия к процессу передачи данных. Может и стоит сайпресс попробовать - заказал уже жука, буду изучать. Но параллельно интересно было погрузиться и в армы.
Ногами дёргать почти не надо. Поток запускается, после чего сенсор шлёт синхронизацию: кадровая (frame valid), строчная (line valid) и пиксельная (pixcl = input clock), по спаду или нарастанию которой (не суть) данные пикселя на Dout0..9 актуальны. Но вот останавливать поток, и правда, как мне кажется, нельзя. Как минимум это приведёт к разному времени экспонирования части картинки, считываемой после паузы. Что недопустимо. Вообще неплохо бы читать данные на максимальной скорости, а потом неспеша передавать их.
А DMA же умеют эти контроллеры организовывать? Ни разу не пробовал, но ежли не попробовать, точно никогда не разберусь.
Взять памяти под полный кадр, пусть чип пишет по DMA во внешнюю память, арм потом неспеша толкает данные в USB... Или я брежу? :(.