И так, продолжаем разговор.
А тему сегодняшнего разговора вы можете прочитать выше.
Делал я как-то одну железку, которая должна общаться посредством SPI с внешним миром. А потестировать ее было на тот момент не начем. Ну я не долго думал и малость усовершенствовал свой Логический анализатор и добавил к нему новую фичу.
И эта новая фича называется SPI логгер.
В самой программе изменился немного интерфейс, но старые функции остались на месте. А так же добавилась новая.
Если приглядеться к главному окну, то можно заметить появившиеся вкладки «Logic Analyzer» и «SPI Logger».
В первой вкладке «Logic Analyzer» все осталось по старому, поэтому я порекомендую вам прочитать эту статью, если есть интерес именно к этой части, а сами мы займемся разглядыванием второй вкладки.
И так, первое, что мы видим — куча всяческих настроек. Ну сами понимаете, SPI - шина не такая уж и простая, как кажется на первый взгляд. Состоит она из целых 4х сигнальных проводов плюс земля:
- CLK — сигнал клок, по которому синхронизируется вся передача. Генерируется «мастером» на шине.
- MISO — Master In Slave Output — сигнал данных от «слэйва» к «мастеру».
- MOSI — Master Output Slave Input — сигнал данных от «мастера» к «слейву».
- SS — Slave Select — еще его называют Chip Select. Сигнал выбора «слейва», с которым общаться будем, если на шине несколько «слэйв» — устройств.
Ну так вот. В программе нужно выбрать следующие параметры
- Роль нашего логгера на шине — «слэйв» или «мастер» в группе «Peripheral Mode».
- Полярность клока. Точнее того уровня, на смене в который будет происходить считывание линий данных. Логично, что в цифровых системах на одном проводе может быть только два состояния — Low и High. Т.е. если выбрана полярность — Active Low, то считывание линий данных будет происходить в момент смены сигнала с High в Low.
- Фаза клока. Тут мы определяем, на каком фронте клока мы будем считывать данные — на первом или на втором.
- Режим передачи битов в байте - либо начиная с MSB и заканчивая LSB, либо наоборот. MSB — Most Significant Bit — наиболее значимый бит, номер 7. LSB — Least Significan Bit — наименее значимый бит, номер 0.
- Далее, если наш логгер выступает «мастером» на шине, то он должен генерить клок. Ему надо сказать, с какой частотой это делать. Тут я малость поленился, и указал частоту так, как в настройках самого контроллера указывается — а именно предоставил возможность выбрать делители системной частоты микроконтроллера. Т.е., чтобы получить фактическую частоту, надо поделить 16000000 герц на тот делитель, который выбран в списке.
- Число байт, которые мы будем ожидать от микроконтроллера в одной посылке, и столько же слать ему.
И так — все параметры установили — теперь нужно настроить железную часть. Это делается нажатием кнопки — «Set SPI Parameters». Само собой — порт коммуникации должен быть открыт (кнопочка в тулбаре должна гореть светло зеленым цветом).
Да. Надо заметить, что если выбран режим «мастер», то пины на логгере будут установленны следующим образом:
- CLK — Output
- MOSI — Output
- MISO — Input
- SS — Output
А если выбран режим «слэйв», то вот так:
- CLK — Input
- MOSI — Input
- MISO -Output
- SS — Input
Так что это надо учитывать при подключении логгера к вашей схеме, чтобы случаем чего не пожечь. Хотя если присоединить к этой железке еще один AVR контроллер, то от неправильной конфигурации ничего не должно случится с портами — мои оба контроллера, логгер и испытуемый, пока живы.
Так же надо учесть тот момент, что в режиме «слэйв» пин SS действует так, как ему и положено действовать. Т.е. данные будут приниматься только тогда, когда этот пин кто нибудь посадит в 0. Иначе ничего не примется.
И так — логгер настроен. Теперь в окошке «Data to Transfer» вводим данные, которые нам надо послать. Это может быть как текст, так и макросы, определяющие шеснадтеричные значения байта, например - $AB$bc$0d будет означать значения 0xAB 0xBC 0x0D. Если же надо послать символ доллара — то надо его набрать два раза: $$. Макрос может содержать только один байт. Т.е. макрос $ABBC будет переделан в три байта: 0xAB 0×42 0×43!
И жмем «Transfer»!
В зависимости от выбранного режима логгера — «мастер» или «слэйв», в окошке «Received Data» появятся данные либо сразу, либо когда на логгер прийдет клок от «мастера».
Для повтора посылки надо снова нажать кнопку «Transfer», или поставить галку «Continuously send» и нажать «Transfer».
В режиме «мастер», при нажатии «Transfer», данные шлются сразу же, так как клок генерится нашим логгером.
В режиме «слэйв», при нажатии «Transfer», данные копируются во внутренний буфер логгера и он переходит в режим ожидания клока от «мастера». Как только клок пришел — данные посылаются, новые данные считываются и шлются в программу GUI и, соответственно, показываются в окошке «Received Data».
Если в режиме «слэйв» не стоит галка «Continuously send», то после того, как наши данные послались, внутренний счетчик байтов остановится и, если клок все еще идет, на шину будет слаться всякий мусор. А галочка «Continuously send» переустанавливает внутренний счетчик на начало буфера и данные снова уходят.
Правда между посылкой последнего байта и переустановкой счетчика проходит довольно много времени, и если клок довольно шустро идет, то на шине все же можно наблюдать иногда мусор. Но я работаю над этим и в следующих версиях попробую устранить этот недостаток.
Так же есть еще две галочки — «RX as Hex» и «Show received data».
Ну последняя, я думаю, вы догадались, включает или выключает показ принятых данных в окошке «Received Data».
А первая устанавливает режим либо простого текста, либо принятые данные будут конвертироваться в HEX представления.
Остались две кнопки — «Clear TX» и «Clear RX». Ну тут ничего особо сложного нет — первая очищает окно «Data to Transfer», а вторая, соответственно, — окно «Received Data».
Собственно — это все, что можно сказать о новом обновлении.
Ах да. Прошивка логгера тоже изменена, и железку надо перепрошить, чтобы она заработала как надо.
Так же я все же подправил схемку, добавил пару недостающих проводов для SPI, и все таки изменил номинал кварца на правильный:
- Программа Логический Анализатор. Версия 2.0 — LogicAnalyzer_V_2_0;
- Некоторые библиотеки от Borland - bcblibs.rar
- Прошивка микроконтроллера - AVRSimpleLogicAnalyser_v_2_0
- Схема прибора - LogicAnalyzerSchematic
23 комментария к “Мои инструменты: Logic Analyzer V. 2.0”
Оставить комментарий или два
Пожалуйста, зарегистрируйтесь для комментирования.
19th August 2011 в 20:02
По схеме есть ряд вопросов. Для чего задействован порт D ? Для чего JP2 вообще нужен? И используется ATmega128 или ATmega128L?
19th August 2011 в 20:24
Порт D выведен в виде тестовых выводов (Test points). На данный момент используется только пин 0, показывающий работу таймера сэмплирования. Типа дебужная фича такая.
JP2 — для подключения ISP-программатора. Обычно новые камни (с завода) поставляются с отключенным фъюзом JTAGEN, и по умолчанию JTAG не работает. Чтобы его включить — требуется записать этот фъюз, а это можно сделать только через ISP программатор или через паралельный, которого у меня нет.
19th August 2011 в 20:27
Насколько я в курсе дела — сейчас уже нету у АВРок разделения на L и не L версии. Они все, вроде как работают от 2.7 и до 5.5 вольт.
В данном случае стоит не L версия. Просто в редакторе схем у меня она первой под руку попалась, и менять не стал. Особой принципиальной разницы тут нет, так как схема питается от USB, а там всегда 5 вольт.
20th August 2011 в 7:49
А почему в последовательном программаторе используются TXD0 и RXD0 а не MISO и MOSI?
20th August 2011 в 7:57
Если почитаете доку на 128ю мегу, то увидите, что именно Мега 128я программируется через RXD0 и TXD0 пины
20th August 2011 в 8:10
Т.е. через MISO и MOSI не выйдет?
20th August 2011 в 9:51
Нет. Мега 128 программируется через линии TXD0 (PE1) RXD0 (PE0) SCK (PB1). Еще используется линия RESET, обязательно.
смотрите раздел 26 Memory Programming — 26.7 Serial Downloading на странице 303 этого документа www.atmel.com/dyn/resourc...ents/doc8151.pdf
20th August 2011 в 10:12
(раньше речь шла о всех Мегах. Позже я подправил комменты. MasterAlexei)
как так, 8,16,48,88,168,8515,8535 — всегда через MISO и MOSI прошивались последовательным программатором?!
20th August 2011 в 10:37
А, да. Тогда 128я — исключение из правила. Подредактирую предыдущие посты, чтобы не вводить читателей в заблуждение.
24th August 2011 в 8:45
При прошивки 128 есть ещё какие нибудь особенности, а то что-то она у меня прогромматором не определяется? Прошиваю через синапрог, прогромматором на ft232rl.
24th August 2011 в 9:06
Да вроде как никаких особых особенностей нет.
1. Самая распространенная ошибка — перепутались RX TX линии. Сам не нее напарывался много раз.
2. Кварц есть? При подаче питания — есть на нем какие то движения (на линии XTAL1)? Хотя если чип с завода только, то он на внутреннем генераторе должен работать.
3. Фъюзы еще не записывали? А то бывает, что если их неправильно записать (на внешний такт, например, а не на внешний кварц), то чип (без тактовой частоты) уже не опознается программатором.
4. Питание на все VCC и GND подали?
Вроде больше никаких затыков не должно быть.
24th August 2011 в 18:46
Ничего не понимаю...
1 проверил, даже менял.
2 она с завода, но и с кварцем то же побывал
3 до Фъюзов я ещё не добрался он не определяется!!! другие меги(8,16,8535)с этим же программатор, и этой же программой нормально прошиваются!
4 питание 5В, на все соответствующие выводы подано.
24th August 2011 в 18:50
Есть возможность кинуть фотки вашей платки (желательно хорошего качества), печатку платы, и схемку на мыло MasterAlexei на goolemail com, я погляжу, чего там не так, если что.
А, и разводку штекера вашего программатора тоже можно, если получится, а то я про такой не слыхал.
24th August 2011 в 19:16
А адрес можно уточнить...
24th August 2011 в 19:22
Ошибочка вышла — букву g пропустил.
MasterAlexei на googlemail com
24th August 2011 в 19:38
Отправил!
24th August 2011 в 20:22
Извиняюсь за беспокойство в файле конфигурации сины касяк был, исправил заработало!!!
24th August 2011 в 20:25
Ну вот и прекрасно
31st August 2011 в 6:46
Если схема работает, как должен на это отреагировать интерфейс программы?
31st August 2011 в 6:57
В настройках надо выбрать COM порт, который появился в системе после подключения устройства к компу, выбрать скорость (вообще в устройстве скорость выбрана 115200, но на компе приходится выбирать 128000. Думаю, это из-за неподходящего для скорости в 115200 кварца), и нажать кнопку на панели под меню (лампочка зеленая, Open Communication Port).
И если порт откроется, то должны уже появиться сэмплы на основном экране. Можно попробовать выставить 300 семплов, 200-300 микросекунд, поставить галочку Repeat Triggering, сам триггер выставить на No triggering, чтобы он постоянно данные читал, нажать кнопку Set All, и поднести руку к проводам, и тогда, по идее, можно увидеть «синус».
Ну и на самом устройстве, при первом старте горят все светодиоды (на самом деле не все горят постоянно а последние три мигают, просто очень быстро).
Еще один момент есть.
При первом подключении, когда в системе еще нет драйвера FTDI, винда, изза того, что устройство постоянно шлет байты в ком, вдруг думает, что подключили мышку, и потому пропадает курсор. Тут поможет только ловкость рук и скорость нажатия на мышку, пока она не перестала работать, и в менеджере устройств отключить «новую определенную мышку» так, чтобы на ней крест красный появился.
31st August 2011 в 7:03
Кстати, Вы же третью версию используете программы?
www.fun-electronic.net/la...ic-analyzer-v-30
31st August 2011 в 7:10
А в выставление фюзов не подскажи, особенно с Low Fuse???
31st August 2011 в 7:21
Вот с этим надо аккуратнее, чтоб не залочить чип навечно.
Прямо сейчас значения фъюзов не подскажу, так как на работе сижу. Если сегодня вечером будет еще актуально, примерно в 22:00 по Москве, черкните, я гляну, что именно у меня стоит.
Но смысл выставления их в том, чтобы JTAG заработал (хотя если Вы прошиваете ISP программатором — это не актуально), источник такта — внешний кварц (не генератор! а именно кварц), Brown Out Detection не нужен. Start Up Time можно и побольше поставить — это не особо стратегический параметр. И главное, чтобы M103C НЕ был запрограммирован. Т.е. мега должна работать в режиме 128й, а НЕ в 103м. WatchDog не нужен, он софтово включается. Ну и BootRst тоже не нужен, так как там нет бутлоадера.
Вот основные рекомендации.
Если Вы уже включили JTAG, и у Вас есть JTAG ICE или что-то подобное, то в AVR Studio можно удобно выставить их.
ВАЖНО! предварительно их считать. Хотя студия их автоматом считывает, но лучше еще раз на кнопку чтения нажать.