Лучший способ внедрить библиотеку в библиотеку

Rogerclark
Солнце 09 декабря 2018 г., 6:04
Ребята

Я пытаюсь взаимодействовать с устройством, которое использует 2 Wire SPI (ну, 3 - это выбор чипа).
(Я использую SPI Slave, но я думаю, что общая реализация в основном такая же, независимо от Master или Slave Mode0

В этой конфигурации линии MISO и MOSI объединяются в одну линию данных.

В настоящее время библиотека SPI не поддерживает это, но STM32F1 (и F4) поддерживают этот режим.

Однако, глядя в библиотеку и базовый код в ядре, я не вижу способа использования (2 провода) BI-направление SPI на уровне эскизов, не настраивая какое-то время SPI на уровне регистрации.

Насколько я могу судить, для включения двунаправленного режима необходимо установить дополнительный бит в SPI CR1

https: // github.com/rogerclarkmelbourne/ ... /spi.H#187

Однако это не способ передать этот «бит» ни в один из вызовов верхнего уровня

Я изначально думал, что смогу объединить этот бит / флаг в режим
эн.глин.
#include #include #define TFT_DC PA15 #define TFT_CS PB4 #define rst PB3 ILI9341_due tft = ILI9341_due(TFT_CS, TFT_DC, rst);

Mrburnette
Солнце 09 декабря 2018 г. 15:03
[Rogerclark - Солнце 09 декабря 2018 г. 6:04] - ...
Если у кого -то есть представление об этом, мне было бы интересно получить отзывы .

Спасибо
Роджер
Считаете ли вы этот «режим» в целом полезной реализации для SPI? Считайте, что это первое, что я услышал для этой потребности во все годы Leaflabs 'и все дополнительные годы STM32duino.

Я вообще противоположна новой функциональности в существующее поведение; тем более, поскольку вы ранее указали желание достичь существующего ядра. Моя рекомендация состоит в том, чтобы создать новые функции (для вашего использования), документ в вики, почему и как они реализованы, и оставить основную реализацию нетронутой. Я не смотрел реализацию класса SPI годами, но не можете ли вы наследовать и не настроить поведение в своем собственном коде?

На этом этапе в жизненном цикле всегда есть одноразовая, но основные улучшения базового SPI в жизненном цикле.

Луча

Rogerclark
Солнце 09 декабря 2018 г. 8:10 вечера
Спасибо, Рэй

Я не уверен, сколько устройств использует 2 -й проволочный протокол SPI.

Я делаю некоторые время от времени, но это’S не используется ни одним из основных модулей, нацеленных на Arduino и Hobbies Пользователи.

Я не ДОН’Не думаю, что этот режим реализован для официального ядра STM, так как он’T часть ARDUINO API.

Но я’Не рассматривал структуру официального ядра STM с точки зрения библиотеки SPI и базового кода SPI в ядре, чтобы увидеть, будет ли легче написать эскиз для работы в этом режиме, используя это ядро.


Поэтому независимо от того, какое ядро ​​я использую, мне либо нужно изменить ядро, либо повторить части ядра и библиотеки SPI в эскиз.

Самый простой вариант - это, вероятно, иметь мою собственную личную ветвь репо, чтобы я мог изменить это и оставить главную версию в одиночку.

Mrburnette
Солнце 09 декабря 2018 г., 21:27
[Rogerclark - Солнце 09 декабря 2018 г. 8:10 вечера] - ...
Я сталкиваюсь с этим время от времени, но это’S не используется ни одним из основных модулей, нацеленных на Arduino и Hobbies Пользователи.
...
Самый простой вариант - это, вероятно, иметь мою собственную личную ветвь репо, чтобы я мог изменить это и оставить главную версию в одиночку.
Ну, это мое мышление. У Стива есть свое собственное исходное дерево, как и другие по той же конкретной причине: личная потребность. SPI/I2C уже является приоритетной темой для новых пользователей, все, кроме перерыва, просто будет генерировать шум форума, когда/почему/как.

Я все еще предпочитаю наследство и расширение класса; Не должно быть никакого наказания на производительность, даже если вы используете SPI "AS IS" и Spieficed... Там будет небольшое количество SRAM, выделенного как указатели на виртуальные функции, но это почти не проблема. Компилятор выполняет работу и разрешает вызовы между виртуальными и не виртуальными вызовами во время компиляции.

Луча

Стивестронг
Солнце 09 декабря 2018 г. 22:45
Я вижу решение, которое будет включать в себя минимальные изменения (2 новые линии) и использует ваш подход RTC has set the system time 18:37:44 8/5/2018 0:00:18 1/1/1970 0:00:20 1/1/1970 0:00:21 1/1/1970

Rogerclark
Солнце 09 декабря 2018 11:21
Стив

Мне нравится твое решение.

Потребуются еще несколько изменений, потому что DataMode - это uint8_t

https: // github.com/rogerclarkmelbourne/ ... SPI.H#L147

и все конструкторы
https: // github.com/rogerclarkmelbourne/ ... SPI.H#L118

Я пытался изменить DataMode на UNIT32_T.

Но перемещение флага из DataMode в флаги в BeginSlave решит это, так как флаги 32 бит.

Мне, вероятно, нужно было внести такое же изменение, чтобы начать (), чтобы начать



Луча.

Решение Стива действительно добавляет 2 строки кода, но, поскольку начало транзакции или начала не называется так часто, оно не может привести к удару производительности

Изменение DataMode с Uint8_T на UNIT32_T, вероятно, не имело бы никакого значения ни для использования ОЗУ, ни производительности в целом, потому что компилятор, по -видимому, благоприятствует продвижению большинства типов данных до 32 бит для большинства операций, вероятно, с тех пор, как его быстрее

Один из способов расширения, а не влияния начинается и бейинтранзист, либо добавьте новые функции e.глин. BeginBirderectional и т. Д. Или для перегрузки конструктора.

Однако в этом случае, если решение Стива работает, изменения довольно минимальны и, возможно, не будут слишком большим риском включить в существующие функции

Мне нужно провести некоторое тестирование.


У меня также есть еще несколько вещей, чтобы тренироваться...

В двухнамерном режиме, SPI.Передача не может быть использована / не будет работать. Только SPI.Читать и SPI.Написать можно использовать.

Я бы не изменил эти функции, чтобы установить / очистить флаг направления, так как это приведет к некоторому удару на производительность.

Мне понадобится отдельная функция для установки режима TX и RX-режима, так как спецификация, похоже, говорит, что SPI должен быть отключен и повторно включен при изменении направления.


Я посмотрю на это сегодня вечером, так как это должно быть лучше, чем немного стучать


КСТАТИ.

Я пытался соединить мисо и MOSI вместе, а затем установить PA6 (вывод в этом случае), чтобы вход PinMode, когда я хочу получить данные.

Тем не менее, что-то очень странное случается, когда я повторно устроен PA6, даже если я повторно влюблен в SPI.
Что жаль, так как настройка PA6 для ввода останавливает его, когда я не хочу, чтобы он был.

Стивестронг
Солнце 09 декабря 2018 11:28
Да, я упустил из виду разрешение бита, я видел, как другие переменные имеют ширину 32 бит.
Для DataMode 16 бит действительно достаточно, потому что Spi_cr1_bidimode_bit только 15. 32-битное разрешение, конечно, будущее.
Я думаю, что изменения могут быть классифицированы как низкий риск.

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

Mrburnette
Пн 10 декабря 2018 г. 1:04
[Стивестронг - Солнце 09 декабря 2018 г., 23:28] - ...
Тем не менее, я никогда не использовал этот режим, и у меня нет приложений/оборудования, на котором можно проверить его.
Да, то же самое здесь.
Однажды я проповедовал своей команде, что нет такой вещи, как изменения с низким уровнем риска; Все изменения должны идти на одну и ту же дорогу проверки до производства.
Я все еще за создание отделения подмастера на GitHub.com, чтобы инкапсулировать конкретную потребность Роджера (s.)
[Rogerclark - Солнце 09 декабря 2018 11:21 вечера] - ...
КСТАТИ.

Я пытался соединить мисо и MOSI вместе, а затем установить PA6 (вывод в этом случае), чтобы вход PinMode, когда я хочу получить данные.

Тем не менее, что-то очень странное случается, когда я повторно устроен PA6, даже если я повторно влюблен в SPI.
Что жаль, так как настройка PA6 для ввода останавливает его, когда я не хочу, чтобы он был.
Итак, может быть, это область, которую MR. Пиллон должен комментировать?
... В конце концов, он рассматривается в справочном руководстве, и его команда может принять решение о включении режима в официальном ядре.


Луча

Rogerclark
Пн 10 декабря 2018 г., 2:19
[Mrburnette - Пн 10 декабря 2018 г. 1:04] -
[Rogerclark - Солнце 09 декабря 2018 11:21 вечера] - ...
КСТАТИ.

Я пытался соединить мисо и MOSI вместе, а затем установить PA6 (вывод в этом случае), чтобы вход PinMode, когда я хочу получить данные.

Тем не менее, что-то очень странное случается, когда я повторно устроен PA6, даже если я повторно влюблен в SPI.
Что жаль, так как настройка PA6 для ввода останавливает его, когда я не хочу, чтобы он был.
Итак, может быть, это область, которую MR. Пиллон должен комментировать?
... В конце концов, он рассматривается в справочном руководстве, и его команда может принять решение о включении режима в официальном ядре.


Луча

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

Конечно, это может быть взаимодействие с остальной частью системы, которое вызывает это, потому что мастер SPI все еще отправляет данные на свою MOSI, просто STM одновременно помещает различные данные на PA6 (его мисо).

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

Rogerclark
Пн 10 декабря 2018 г., 10:02
Хорошо,

Я думаю, что я собираюсь отказаться от этого и просто использовать битовые блюда, так как скорость передачи данных настолько медленная (19 кГц)

Я реализовал двунаправленную функциональность, используя метод Стива, но я получил те же странные результаты, что и когда я попытался соединить мисо и MOSI вместе внешне (через резистор 10 К)

Мне нужно прочитать ошибки для STM32, потому что я использую режим SPI3 в режиме рабов, и в некоторых случаях я получаю глюки (очень маленькие импульсы на линии данных), а не данные, которые я запросил.

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

Поэтому я откажусь от использования аппаратного обеспечения SPI для отправки данных, так как не стоит тратить на него больше времени, так как конечный результат также может быть бесполезным, так как в настоящее время UHF -радио, которое я пытаюсь изменить, не выводит Аудио, которое может прочитать мое программное обеспечение для декодера моего компьютера - так что может быть что -то еще, что делает невозможным использовать это аналоговое радио FM с цифровыми радио режимами (4 FSK)

Rogerclark
Вторник 11 декабря 2018 11:41
К вашему сведению

Я думаю, что могут быть некоторые ошибки с реализацией SPI Slave.

Используя режим SPI 3, я вижу странные шипы / глюки на мисо, когда я должен увидеть импульсы, пока часовой сигнал.

Как ни странно, иногда это работает, а иногда это не так :-(

Наверное, мне придется построить испытательную установку, чтобы изолировать, вызвана ли проблема «Мастером», с которой я подключаюсь, или некоторая проблема с установкой рабов.
Скорость тактовой частоты SPI, которую отправляет мастер, очень медленная 19 кГц, но я предположил, что это не будет иметь никакого значения, поскольку STM32 должен использовать входящие часы для чтения в каждом «бите» на одном краю часов, и и нужно поставить данные на шину на противоположный край тактового импульса.

STM32 осциллограф