Нужна помощь Telink Single Wire

nikolz

Well-known member
Подскажите команду - пустышку для формирование точной длительности импульса на GPIO
Если импульс в 83.3 нс
надо паузу ровно в 4 раза больше
а получается либо в 3.5 либо в 4.5 больше
 

pvvx

Активный участник сообщества
Подскажите команду - пустышку для формирование точной длительности импульса на GPIO
Если импульс в 83.3 нс
надо паузу ровно в 4 раза больше
а получается либо в 3.5 либо в 4.5 больше
Делается путем вывода в регистр GPIO, далее N чтением регистра GPIO, следующий вывод в GPIO.
CPU при этом шагает со скоростью тактирования шины и самого контроллера GPIO = фиксированное время, зависящее от частоты кварца.
Джиттер будет от работы "кеш", как и прерывания если не запрещены, в одну сторону - в увеличение длительности.
Если код в IRAM и прерывания запрещены - джиттера нет.
Чтение регистра значений входов GPIO ~6.6MHz. Точнее - считайте кратность к 26 MHz.
 

pvvx

Активный участник сообщества
Процесс безусловно сложнее, т.к. сказывается ещё кратность к CLK CPU. Это зависит от кода - надо смотреть asm, но после сборки он всегда будет фиксирован. По этому у нас бьют 26/4 GPIO и 80 или 160 MHz CPU и программа расчета длительности в тактах CLK CPU говорит о средних 6.6 MHz.
 

nikolz

Well-known member
Несовместимые условия. GPIO тактируется 6.5 MHz (26/4)
Из этого ряд: 153.846, 307.692, 461.538, 615.385, 769.231 нс строба GPIO.
у меня минимальный импульс составляет 83 нс, он состоит из двух обращений
т е получается 41.5 нс - одно обращение к GPIO
удалось сделать 3.995 путем увеличения длительности до 166 нс
---------------------------
но пока не удается заставить TLSR откликнуться на запрос.
как полагаете возможно это из за неточного соотношения
или причина иная?
 

pvvx

Активный участник сообщества
у меня минимальный импульс составляет 83 нс, он состоит из двух обращений
т е получается 41.5 нс - одно обращение к GPIO
ESP8266
На вывод в GPIO - 2 такта шины 26MHz (работа шины = 6 тактов CLK CPU 80MHz или 12 тактов CLK CPU 160MHz)
http://esp8266.ru/forum/threads/tajmer-i-gpio.75/page-2#post-1318 (быстрее невозможно)
А чтение GPIO - 4 такта шины 26MHz

Всё с учетом FIFO шины! При занятости FIFO - дополнительная задержка.
 

pvvx

Активный участник сообщества
но пока не удается заставить TLSR откликнуться на запрос.
как полагаете возможно это из за неточного соотношения
или причина иная?
У меня нет сейчас TLSR. В город не поеду... я отдыхаю от города.
По докам и прочим файлам от Телинк - там всегда жестко программируется скорость работы контроллера swire и в разных сетапах она разная. Это может говорить о том, что требуется возможность плавного стробирования тактов шины от 0 до 10MГц. 1 бит на 5 тактов по 10MГц = 2Mbps. И т.к. существуют расхождения кварцев и всяких четностей - вам нужен контроллер с шагом изменения строба в пару нс для диапазона 10МГц. :p
 

pvvx

Активный участник сообщества
Из этого - самый простой вариант = запрограммировать сам модуль TLSR8269.
К тому-же вы пишите, что у вас всё благополучно собирается на их SDK, а по докам TLSR8269 запросто программируется по USB.
 

pvvx

Активный участник сообщества
@nikolz - но, судя по вашему копанию, вы хотите подать всего пару команд в TLSR модуль. Например - erase all или аналогичное :)
Для этого требуется мышкой в окошке нарисовать диаграмму и передать её в генератор произвольных сигналов :p
Можно и в аналоговый. Там дискретизация обычно (у дешевых) от 200 Msps и есть ручка плавного изменения...
Дело пяти минут.
 

nikolz

Well-known member
Из этого - самый простой вариант = запрограммировать сам модуль TLSR8269.
К тому-же вы пишите, что у вас всё благополучно собирается на их SDK, а по докам TLSR8269 запросто программируется по USB.
все не так просто как кажется изначально.
Дело в том, что в 8269 они совместили SWM с Rx и в итоге прошивка для 8266 мало вероятно заработает на SW
Кроме того, пока не нашел что-либо про работу с SWM и какие-либо функции для него.
Задал вопросы китайцам.
Экспериментирую
 

nikolz

Well-known member
@nikolz - но, судя по вашему копанию, вы хотите подать всего пару команд в TLSR модуль. Например - erase all или аналогичное :)
Для этого требуется мышкой в окошке нарисовать диаграмму и передать её в генератор произвольных сигналов :p
Можно и в аналоговый. Там дискретизация обычно (у дешевых) от 200 Msps и есть ручка плавного изменения...
Дело пяти минут.
Дело в том что Erase работает через BDT и USB
Все работает до момента записи во флеш примера и рестарта
после этого USB либо вообще не реагирует
либо ком сообщает об ошибке USB и тоже не работает
Как с этим бороться пока не знаю
 

pvvx

Активный участник сообщества
Дело в том что Erase работает через BDT и USB
Все работает до момента записи во флеш примера и рестарта
после этого USB либо вообще не реагирует
либо ком сообщает об ошибке USB и тоже не работает
Как с этим бороться пока не знаю
upload_2019-9-9_17-56-7.png
Тут указано, что на swire есть какое-то "Activate".
А так-же, что есть "Erase flash".
 
Сверху Снизу