Мы уже делали USB устройство на плате Марсоход. Проект тот был вполне работоспособный, но был у него один существенный недостаток. Дело в том, что в этом проекте использовалась тактовая частота от встроенного генератора - примерно 5Мгц. В разных партиях микросхем EPM240T100C5, используемой в плате Марсоход частота этого генератора различается и иногда значительно.
Вот это и печально. Это значит, что не на всех платах тот проект заработает сразу и без проблем. Я сделал ряд экспериментов и вижу, что проект работает очень хорошо, если частота внутреннего генератора около 4,880Мгц. Если больше 5Мгц, то начинаются проблемы - USB транзакции плохо принимаются моим устройством или то, что оно отправляет не принимает хост (компьютер).
С этим нужно что-то делать...
На самом деле, конечно, низкоскоростные устройства USB передают и принимают данные на частоте 1,5Мгц. В этом смысле самая удобная для нас частота будет 12Мгц (а не 5Мгц как сейчас). Число 12 хорошо делится на 8 и получается как раз нужные нам 1,5.
Чтобы решить проблему мы использовали внешний генератор 24Мгц (KCO-010T KOYO). Он выпаян из старой материнской платы и к сожалению довольно большой по габаритам. Возможно вы найдете себе генератор меньших размеров.
На этих картинках видно как он припаян к плате Марсоход:
Внутри проекта Quartus II для платы Марсоход частота 24Мгц теперь делится на 2 и получается 12Мгц, которые идут далее везде: на приемник, передатчик, ядро и UFM.
Выход генератора подается на PIN_75 платы Марсоход. Во многих наших проектах эта нога называется pt_right. Чтобы убедиться, что у меня получилась нужная частота, я вывел ее наружу, на контакты f0 платы Марсоход и померял частоту нашим частотомером (кстати сделан то же из платы Марсоход).
Теперь USB приемник и USB передатчик пришлось немного переделать - и даже упростить. Ведь нам нужно всего лишь поделить 12Мгц на 8, а не городить "огород" вычисляя 1,5Мгц из ~5Мгц, как это было раньше.
Так что теперь стало все и проще и надежней.
После прошивки нового проекта в плату Марсоход я убедился, что все работает не хуже чем раньше. Даже наоборот - теперь я спокоен, что наши читатели смогут повторить этот проект у себя. Драйвера к плате и тестовую программу возьмите из старого проекта:
А вот и мой новый проект, использующий внешний генератор:
Подробнее...