Перейти к содержанию
    

adnega

Свой
  • Постов

    3 603
  • Зарегистрирован

  • Посещение

  • Победитель дней

    3

Сообщения, опубликованные adnega


  1. Есть положим STM32F103, у него максимальная тактовая 72 МГц. Будет ли процессор реально работать на этой частоте если программа выполняется из внутренней флеш памяти? Или там будут какие то задержки при выборке команд? Ведь флеш считается медленной памятью.

    Тут над архитектурой постарались не только ST, но и ARM.

    Буфер предвыборки и отдельная ICode-шина делают все возможное, чтобы медленная Flash не влияла на производительность.

    В случае линейно исполниемого кода работа идет на частоте ядра. Простые условные операции хорошо выполняются IT-блоками.

    Нужно еще постараться, чтобы код из ОЗУ выполнялся быстрее, чем из Flash.

  2. Мне не поможет, т.к. количество байт для считывания может быть и нечетным.

    Почему же?

    Если данных четное число, то просто отправляем их 16 битными посылками.

    Если нечетное, то отправляем один байт, дожидаемся приема. Затем отправляем четное количество данных.

    Ожидание приема можно совместить с настройкой DMA, т.е. отправляете байт, настраиваете DMA, ждете флаг приема

    (а с учетом Вашей скорости SPI он уже закончится), отправляете данные через DMA 16-битными словами.

     

    А это как, на таймерах видеопамять ?

    Обычно светодиодное табло - это длинный/длинные сдвиговые регистры. В случае динамической индикации все еще интереснее.

    Так вот, на таймерах STM можно сделать отправку видеоданных через SPI и DMA с формированием всех необходимых

    строб-сигналов. Т.е. остается только периодически вызывать refresh(), в которой инициализируется таймеры, DMA и SPI

    - все остальное делается аппаратно, причем не для одной строки, а целиком для всей видеопамяти. Нагрузка на CPU 0%.

  3. Потерял доку, где были описаны регистры и их адреса с колибровочными зоводскими значениями для VREF и температуры. Однодневный поиск по ST почему то ничего не дал.

    Может, поискать в семействе STM32F3?...

    DS на STM32F372/373

    6.3.20 Temperature sensor characteristics

    6.3.21 VBAT monitoring characteristics

    6.3.22 Timer characteristics

    The parameters given in Table 68 are guaranteed by design.

    Refer to Section 6.3.14: I/O port characteristics for details on the input/output alternate

    function characteristics (output compare, input capture, external clock, PWM output).

    Table 65. Temperature sensor calibration values

    Calibration value name Description Memory address

    TS_CAL1 TS ADC raw data acquired at temperature of 30 °C, VDDA= 3.3 V 0x1FFF F7B8 - 0x1FFF F7B9

    TS_CAL2 TS ADC raw data acquired at temperature of 110 °C VDDA= 3.3 V 0x1FFF F7C2 - 0x1FFF F7C3

  4. Или просто я дурак, что связался с стшным контроллером??? Хотя время еще есть можно послать его к "ядреной бабушке", и раскурить что-нить более путевое, типа nxp или atmel... На вашем месте, что лучше сделать??

    Ну, ST надо уметь готовить))

    В моих задачах я на одном STM32 могу все решить блягодаря его "аццким" таймерам, DMA и т.п.

    Пытался аналогичное сделать на NXP (а ARM7 и первые Cortex я осваивал по NXP) - не получается.

    Сейчас уже не помню подробностей, но таймеры у NXP "обычные" - только захват и сравнение.

    DMA у NXP по крайне мере раньше обслуживал маленький список "счастливчиков" и АЦП, вроде, в него не входил.

    Крайний раз в NXP меня поразил Cortex с CAN-phy на борту (2 года назад), но так руки и не дошли, хотя с десяток микросхем все это

    время пылится в столе.

     

    Если вдруг решите связаться с ST, то про "его кухню" тут не мало постов. Но придется читать документацию, и некоторые особенности

    применения узнавать из StdLib - с течением времени рвотный рефлекс приглушается и все становится нормой. Самое интересное, что

    я практически купил кучку STM32F429 (в дороге), на которых даже нет документации на сайте)) Говорят, появится в октябре. Ну вот как-то так...

  5. Ага, щаз. Сколько пройдет тактов при передаче байта? Правильно, 16. :)

    Т.е. 4 такта на собсна fetching все-же есть. А пробовали заглушить АЦП-DMA?

    Чаще всего 12 тактов, но иногда и больше.

    Делал светодиодное табло с динамической индикацией: видеопамять с помощью таймеров (каскадное соединение), SPI и DMA передавалась

    в светодиодную панель. И вроде все хорошо и согласуется с теорией, но иногда были не то проблескивания, не то сдвиги столбцов и строк...

    Очень редко, очень неуловимо, но когда понял что к чему, оказалось что есть задержка 12 тактов, но иногда (и именно в этих случаях были проблемы) больше 12. DMA был настроен на SPI_TX. Необходимые стробы формировались таймером. Задержка в первом байте на 12 тактов могла означать сдвиг на фиксированное число точек (в моем случае на 1) и легко фиксилось программно, но в случаях задержки более 12 тактов - были сбои. DMA с наивысшим приоритетом и использовался только канал SPI_TX.

    Недано на скорую руку делал титровалку (наложение текста на видеосигнал) на STM32F373 при скорости SPI близкой к частоте ядра опять те же

    проблемы. Увеличил BR для SPI (да горизонтальное разрешение упало, но мне не критично) и артефакты пропали.

     

    Добавлено:

    Да, совсем забыл - очень помогает уйти от 8 битных посылок SPI к 16 битным.

  6. Есть идеи?

    Когда занимался с таймером и DMA обнаружил, что от момента старта DMA до момента DMA-транзакции проходит более 12 тактов.

    Этот момент даже где-то описан в документации.

    Думаю, проблема в старте DMA, когда приходит первый байт, запускается DMA, но сама DMA-транзакция наступает спустя 12 тактов.

    За это время уже успувает придти второй байт.

    С позиций передатчика выглядит так: первый байт отправляется с паузой 12 тактов, а второй и последующие без пауз.

  7. Нет, я не "капризничаю". Так даже удобнее, не нужно ловить асинхронные сообщения. Просто этот момент был не понятен. Спасибо за помощь!

    Я в этом не уверен. Скорее и у самого нет полного понимания. Кстати, когда соединение рвет вторая сторона у меня у самого не все хорошо.

    Редко, но бывает события приходят не те, которые приходят обычно. Лог как-нить могу скинуть.

  8. то есть я должен постоянно вызывать at^sisr и проверять есть ли данные?

    А как Вы хотели бы?

    Можно конечно выставить AT^SISR=0,1500 и если в бефере на текущий момент что-то есть, то придет порция из 1500 символов.

    Представьте, что модем будет слать все что приходит. Т.е. если вторая сторона отправила сначала 100 кБ, потом еще 100 кБ...

  9. Передаю данные по жпрсу, для чтения данных использую команду at^sisr=0,8 (читаю по 8 символов из первого профиля). Согласно доке, если правильно понял, сигнал о том, что данные прилетели, служит асинхронно выскакивающая ^SISR: 0,1. Соединение устанавливается и, когда данные приходят, ^SISR: 0,1 выскакивает, данные читаются и обрабатываются. Но так происходит только один раз, самый первый раз. Дальше, когда данные приходят (а они точно приходят, ибо если насильно запустить at^sisr, данные можно считать), ^SISR: 0,1 НЕ выскакивает. В чем дело? Буду признателен за помощь.

    Насколько я понял, первый раз ^SISR: 0,1 приходит не с данными, а по факту свершения тройного рукопожатия TCP.

    В дальнейшем нужно вызывать AT^SISR=0,8, модем сначала ответит OK, а затем асинхронно ^SISR: 0,8 и выдаст принятые данные.

    При закрытии соединения также придет асинхронное ^SISR: , но тут в зависимости чья инициатива для закрытия сокета.

  10. относительно повторяемости два раза я откладывал разработку прошивки в сторону и занимался прочими вещами, оба раза дня через три-четыре платка висла

    после передергивания аномалий старта не наблюдается

    перемычки не трогал

    программка - удп ответ по езернету типа пинга

    пока грешу на встроенный программатор возможно он переводит микроконтроллер в режим отладки и останавливает его, когда так делаешь в отладчике контроллер тоже не реагирует на кнопку ресета, ну и надеялся что кто-то с таким уже сталкивался

    да питание по юсби по которому произвожу отладку, оба раза просто выключал отладчик непередергивая питания оставляя платку в рабочем режиме

    По самим STM32F407V вопросов никогда не было за исключением:

    вроде... в ревизии А если неправильно "обойтись" с 99 (или 100) ножкой (вроде PDR), то плохо стартует при подаче питания, но начинает работать по RESETу.

    Сама плата STM32F4-discovery сделана мягко говоря "не очень". Стабильно зависает если тронуть в районе U6 (ключ USB под кнопкой RESET).

    Обратите внимание, что тактирование происходит от программатора-отладчика частотой 8МГц. Может, с отладчиком комп что-то делает (с недельным аптаймом),

    что выходная частота сбивается и срабатывает CSS. Как вариант запаять кварц и снять перемычку (вроде R68).

  11. да снимаю питание и подключаю заново

    "Раз в неделю" - это насколько точно и повторяемо? Ровно через 600 тыс. секунд?

    После передергивания питания стартует сразу?

    Перемычки на заводской плате трогали (reset, xtal)?

    Что за программа, какими ресурсами оперирует?

  12. да видимо придется вторую макетку собирать чтоб ее поставить - одна нужна для продолжения работы над прошивкой, думал кто то сталкивался с подобным, ресет же должен контроллер оживлять то по любому?

    А как Вы его сейчас оживляете? Передергиванием питания?

  13. я не ошибаюсь, просто мое мнение отлично от вашего :) Для меня - хлам, я не гуманитарий просто в силу ассиметрии полушарий мозга. Кто-то - наооброт. Человеческие фантазии , жизнеописания действий других homo sapiens особого интереса мне не представляют. Если , конечно, это не приносит прибыли. И в нынешние 35 литература интересна исключительно научно-фантастическая.

    ЗЫ А писать то уже разучился, максимум - бланк на почт и то потом рука болит. Только клавиатура

    Я своим образованием доволен и считаю 5 лет ВУЗа не были потрачены зря. Но сейчас веду общение в этой ветке со стороны "какое образование получат мои дети"? Мне бы хотелось чтобы ВУЗовское (особо важно для технарей). С другой стороны у меня жена и теща в образовании (лингвисты).

    Так вот ВУЗы нужны не только для того, чтобы в них просиживать лучшие годы и получать за это корочки, а еще и для того, чтобы создавать среду, в которой информация обрабатывется и выкладывается в общий доступ, для гениев, которым жалко 5 лет.

     

    Тут вопрос непростой как "делать ли прививку ребенку"?

    "Да" - берешь на себя риски, что потеряешь ребенка или он станет инвалидом: "нет" - рискуешь гораздо меньше, но если бы все выбирали "нет", то риски заболеть были бы гораааздо выше для всех.

    Я за прививки.

  14. Я уже больше 10 лет успешно проектирую различные электронные устройства (как аппаратную часть так и эмбедыд софт) которые выпускаются очень большими сериями и имеют очень жосткие требования к качеству, но.... при этом из всей ВУЗовской науки использую только закон Ома выученый в школе....

    ТОЭ и уж тем более физику с математикой ума не приложу как применить в розработке :) Ну может арифметику... да и тут калькулятор есть :)

     

    Даже не знаю как так получается... просто обидно за бесцельно проученные годы :(

    Почемуто вся инженерия состоит из знания конкретных решений, умения пользоваться конкретными програмами и просто правильно ростущих рук....

    А всё это можно получить только читая нужные книжки по теме и применяя на практике полученные знания....

    Встречал не раз товарищей с "правильно ростущими руками", но без хорошего ВУЗовского образования, которых постоянно тянет на изобретенение вечного двигателя и т.п.

     

    ВУЗ в числе прочего даст представление о том, что на данном этапе развития науки возможно, а что нет. Это в добавку к закону Ома и "учению учиться".

     

  15. читаем док BGS2-E_ATC_V01.301

    10.6 AT^SISO

    статус сервиса 6 DOWN (причину не рассматриваем)

    далее написано

    If a service in this state be sure to close it with AT^SISC before reopening it.

    Спасибо. Попробую.

    Но без AT^SISC все работает годами (просто, спустя какое-то время делаю AT^SISO и сокет открывается).

  16. Главное запомнить, каждая команда AT^SISO должна заканчиваться AT^SISC

    Можно поподробней?

    Если соединение разрывает сервер (которому уже нечего передавать), то AT^SISC нужен?

  17. Приборы тестировались в Украине, с оператором сотовой связи «Киевстар», проблем с передачей не было.

    А в России , с оператором сотовой связи «Билайн», работает не стабильно. Не всегда устанавливается соединение. Много обрывов связи в момент передачи.

    Периодически (порядка раз в час) бывают ошибки 616 (network is down) или 640 (operation of service temporary not allowed).

    Обычно проходят самостоятельно от нескольких секунд до 2-3 минут, НО иногда все виснет наглухо и помогает только пересброс питания модема. Сам модем при этом работает: звонит, принимает звонки, уровень сигнала отличный, но не отвечает на команду AT^SISO=0.

  18. это для меня всегда было маленьким чудом, и что-то мне подсказывает что в общем случае это не так. Это для определенного вида полиномов вроде бы верно. Или я где то заблуждаюсь?

    В общем случае верно всегда, но при неудачном выборе полинома CRC слабо зависит от данных, т.е. не реагирует на изменение битов.

  19. Между разрядностью полинома и разрядностью данных нет никакой связи.

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

    По сути это остаток от деления длинного числа полученного последовательной записью всех байтов на

    полином. Если полином 16-бит (реально 16+1), то остаток 16 бит. И получается, что 16 битную CRC нельзя добавить

    в конец массива 14 битных данных для получения CRC всего блока (данные + CRC) равной 0.

  20. Но вы ТС ни в чем убедить не сможете, он и сам все знает :)

    Офф:

    У меня один знакомый был - оптимизатор. Оптимизировал непрерывно по поводу и без.

    Он по GPS ходил минимальным маршрутом (ничего, что напролом, через кусты, песок и другие препятствия).

    Круглый год ходил в одной куртке. Когда настали морозы чел прикинул, что если не купить теплую куртку, то

    придется больше есть. ППЦ критерий покупки одежды!

     

    ТС еще далек от такого состояния, но находится на "верном пути"))

×
×
  • Создать...