Ардупилот на платах OpenPilot Revolution / RevoMini (записей: 1756)

  • Аватар профиля m--s s s6 пунктов в 6 г., 5 мес. назад
    [2017-11-14 11:02:58] night_ghost писал(а): Тогда уж 512+512, чтоб 2 пакета почти законно и еще один влез насильно. Закончу очередную пепяку - пересоберу.

    Хорошо, если есть место в ccm, то 512+512 ещё лучше.

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 6 г., 5 мес. назад
    [2017-11-14 11:29:14] m-s писал(а):  Когда несколько лет назад про то, что второй мегабайт нельзя использовать, узнали - тогда уже где-то 800кб прошивка была.

    Дык в том-то и дело что 3.4 лезла, а вот последняя уже перестала, даже с установленным по умолчанию флагом MINIMIZE_FEATURES. А TYT все еще лезет несмотря на кучу дополнительных фич.

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 6 г., 5 мес. назад
    [2017-11-14 11:33:20] m-s писал(а): если есть место в ccm

    еще 20кб, и кроме как на стек и буферизацию его больше ни для чего невозможно использовать. Поэтому я щасс транжирю память - буферизовал также OSD EEPROM, сделал два экрана и пересылаю в DMA только изменившиеся символы, ну вот и UARTы до кучи. Буфер приема также увеличил до 512, чтобы целый пакет лез.

  • Аватар профиля m--s s s6 пунктов в 6 г., 5 мес. назад
    [2017-11-14 11:38:20] night_ghost писал(а): А TYT все еще лезет несмотря на кучу дополнительных фич.

    Отлично. Надеюсь маинстрим не увеличится в ближайшее время ещё больше )

  • Аватар профиля m--s s s6 пунктов в 6 г., 5 мес. назад
    [2017-11-14 11:44:10] night_ghost писал(а): Буфер приема также увеличил до 512, чтобы целый пакет лез.

    Хорошо, будем пробовать. В целом большие буферы тоже плохо - латентность канала увеличивается. Но что же поделаешь, если так спроектировано (

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 6 г., 5 мес. назад
    [2017-11-14 12:12:55] m-s писал(а): В целом большие буферы тоже плохо - латентность канала увеличивается

    отчего ж увеличивается? Я не использую принудительное наполнение, обработка/передача начинается по первому доступному байту, так что с латентностью все в порядке.

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 6 г., 5 мес. назад

    что-то не ладится у меня со встроенным чипом MAX. Скриншот:

    это - символы 5,6 и 7, то есть адреса регистров MAX7456_DMAH, MAX7456_DMAL и MAX7456_DMDI соответственно. Происходит это после выполнения такого вот фрагмента, да впрочем как и любого другого обращения к. 

       while(len--){
            MAX_write(MAX7456_DMAH_reg, cnt>>8);
            MAX_write(MAX7456_DMAL_reg, cnt&0xFF);
            MAX_write(MAX7456_DMDI_reg, 0x20);
            cnt++;
        }

    Как они попадают в память символов - непонятно, используется тот же драйвер SPI как и для других устройств. Но они работают, а это вот так вот издевается. Без осциллографа никак :(

     

  • Аватар профиля m--s s s6 пунктов в 6 г., 5 мес. назад
    [2017-11-15 05:00:00] night_ghost писал(а): Без осциллографа никак

    Spi прослушивать ? Тогда скорее логический анализатор нужен.

  • Аватар профиля An_private An_private в 6 г., 5 мес. назад

    Купите китайский клон Saleae Logic16. Где-то 30-35$. Обалденно удобная штука - пользуюсь таким и не нарадуюсь :)

     

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 6 г., 5 мес. назад
    [2017-11-15 07:41:09] anprivate писал(а): Купите китайский клон Saleae Logic16

    Уже заказал, едет.

    [2017-11-15 06:54:27] m-s писал(а): Тогда скорее логический анализатор нужен.

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

    UPD. А именно они и были (скорее всего) одной из причин что для SPI ранее требовалась оптимизация -O0, ибо выводы CS настраивались по умолчанию на скорость 2МГц. Второй причиной была необходимость дожидаться окончания передачи последнего байта, и выдерживать интервал до снятия CS.

  • Аватар профиля m--s s s6 пунктов в 6 г., 5 мес. назад
    [2017-11-15 07:48:49] night_ghost писал(а): А именно они и были (скорее всего) одной из причин что для SPI ранее требовалась оптимизация -O0, ибо выводы CS настраивались по умолчанию на скорость 2МГц.

    Ах вот оно что.

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 6 г., 5 мес. назад
    [2017-11-17 07:53:26] m-s писал(а): Ах вот оно что.

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

    Меня больше всего расстраивает что железо SPI в режиме мастера во-первых  не умеет вызвывать прерывание по спаду Busy, а во-вторых не умеет само управлять выводом NSS (за исключением режима совместимости TI, в коем оно игнорирует практически все настройки). В АТмеге прерывание пришло - значит передача окончена и все свободны,  а тут блин двойная буферизация, коя приводит к необходимости ждать передачу двух байт прежде чем можно отпустить CS. В прерывании, ага. Убил бы...

  • Аватар профиля m--s s s6 пунктов в 6 г., 5 мес. назад

    Ну в stm32hal  ждут в прерывании. Скорее всего лучше не сделаешь.

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 6 г., 5 мес. назад
    [2017-11-17 09:54:07] m-s писал(а): Ну в stm32hal  ждут в прерывании. Скорее всего лучше не сделаешь.

    СТ-шный Хал писАли индусы и я от него вообще в ужасе, по сравнению с ним SPL покойная просто лапочка была. Не просто ж так в свежих версиях оного ХАЛа появилось семейство функций _ll_, предоставляющее практически ту же функциональность что и SPL :)

     Во всяческих бета-/клин- и прочих флаях тоже ждут в прерывании, аж глаза от такого вытекают   8-O

    void max7456_dma_irq_handler(dmaChannelDescriptor_t* descriptor)
    {
    if (DMA_GET_FLAG_STATUS(descriptor, DMA_IT_TCIF)) {
    #ifdef MAX7456_DMA_CHANNEL_RX
    DMA_Cmd(MAX7456_DMA_CHANNEL_RX, DISABLE);
    #endif
    // make sure spi dmd transfer is complete
    while (SPI_I2S_GetFlagStatus (MAX7456_SPI_INSTANCE, SPI_I2S_FLAG_TXE) == RESET) {};
    while (SPI_I2S_GetFlagStatus (MAX7456_SPI_INSTANCE, SPI_I2S_FLAG_BSY) == SET) {};

    но как говорится  - "на горбатых не равняются", и таки есть способ лучше :) Я вот только что доделал отправку данных по SPI со стробированием каждого байта CS-ом, как этого MAX требует, и без малейшего ожидания в прерывании.

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 6 г., 5 мес. назад
    [2017-11-17 10:23:33] night_ghost писал(а): доделал отправку данных по SPI со стробированием каждого байта CS-ом, как этого MAX требует

    Вот и отладил, все отлично работает.  Можно конечно делать как в Бета/Клин-флаях, отправляя через DMA установку внутреннего адреса и сам байт, только у меня это приводило к периодическим зависаниям MAX7456, и судя по  наличию кода проверке и реинициализации, у них тоже. Ибо по даташиту MAX требует стробирования CS-ом каждого обмена, а в автоинкрементном режиме вообще каждого байта, и как неоднократно было проверено еще с АТмегой, без этого нормально не работает. А железный SPI STM-ки так не умеет.

    Также пришлось добавить задержки на 100нс для обеспечения времени предустановки CS перед SCK, для тормозной АТмеги это было не нужно, а тут пришлось.

    Бинарники с работающим ОСД собираются. 

← Форум группы   Все форумы К последней записи
Постов на странице:

Вы автоматически вступите в эту группу, когда ответите в теме.

Добавить ответ:

-
Рейтинг@Mail.ru