• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

BLE модули TB-04/TB-03F (TLSR8253F512)

Slacky

Member
А вот еще вопрос. Есть такая функция - flash_erase_page(). Но написано работает только с 8359. Есть какая-то возможность стирать не секторами, а страницами на 8253?
 

pvvx

Активный участник сообщества
В исходниках к новому SDK значатся такие Flash:

Flash Type MID Company
GD25LD40C 0x60C8 GD
GD25LD05C 0x60C8 GD
P25Q40L 0x6085 PUYA
MD25D40DGIG 0x4051 GD
GD25D10C 0x40C8 GD
PN25F04C 0x311C XTX

TlsrPgm говорит, что Flash JEDEC ID: 0xC86013, Size: 512 kbytes
т.е. в новых партиях-сериях могут быть разные кристаллы Flash и для стирания страниц(ы) и их размеров надо смотреть PDF на конкретную Flash....


ble_sdk_multimode\drivers\8258\flash.c имеет секцию с /* according to your appliaction */
в ней flash_erase_32kblock() , flash_erase_64kblock() и т.д.
 

pvvx

Активный участник сообщества
Я пошел другим путем. Сейчас придут еще пара модулей, распаяю по-новой. Посмотрим ...
Оставшийся вариант причины мусора - несоответствие скорости. Это чаше сказывается на длинных непрерывных фреймах.
Вторая причина или фича - все известные китайские чипы UART-USB принимают любой символ в буфер приема, даже если нет стоп бита (т.е. любой импульс они считают стартом символа и не следят за битовой синхронизацией).
FTDI чипы не пускают в приемный буфер символы с ошибочной синхронизацией и проверяют каждый бит на не менее 3 поэтапных выборок для откидывания шума. При неправильном символе у них передается флаг ошибки битовой синхронизации, а символ не принимается. Такая фича.
 

Slacky

Member
В исходниках к новому SDK значатся такие Flash:

Flash Type MID Company
GD25LD40C 0x60C8 GD
GD25LD05C 0x60C8 GD
P25Q40L 0x6085 PUYA
MD25D40DGIG 0x4051 GD
GD25D10C 0x40C8 GD
PN25F04C 0x311C XTX

TlsrPgm говорит, что Flash JEDEC ID: 0xC86013, Size: 512 kbytes
т.е. в новых партиях-сериях могут быть разные кристаллы Flash и для стирания страниц(ы) и их размеров надо смотреть PDF на конкретную Flash....


ble_sdk_multimode\drivers\8258\flash.c имеет секцию с /* according to your appliaction */
в ней flash_erase_32kblock() , flash_erase_64kblock() и т.д.
Еслил честно, я не знаю что за ble_sdk_multimode. У telink'а на сайте я скачал Bluetooth LE Single Connection. Начал смотреть, что там еще есть у Ai-Thinker и обнаружил там нормально прописанную функцию flash_erase_page(). Добавил это дело в свой SDK и о чудо, оно заработало. Хотя написано, что будет работать only P25Q40L support this function.

Сейчас гоняю кольцевой буфер на запись и чтение в шагом 256 байт. Вроде все работает ...

Код:
Save config to flash. watermeter_config.flash_addr - 0x56100
Save config to flash. watermeter_config.flash_addr - 0x56200
Save config to flash. watermeter_config.flash_addr - 0x56300
Save config to flash. watermeter_config.flash_addr - 0x56400
Save config to flash. watermeter_config.flash_addr - 0x56500

Тут нажали кнопку Reset

Start user_init_normal()
Read config from flash. watermeter_config.flash_addr - 0x56500
set_adv_data()
Bound, start with whitelist!
Save config to flash. watermeter_config.flash_addr - 0x56600
Save config to flash. watermeter_config.flash_addr - 0x56700
Save config to flash. watermeter_config.flash_addr - 0x56800
Save config to flash. watermeter_config.flash_addr - 0x56900
 

Slacky

Member
Не, не работает. Первый проход отрабатывает только потому, что в самом начале идет полное очищение флеш в user area. А второй круг уже не сохраняет ...
 

pvvx

Активный участник сообщества
Не, не работает. Первый проход отрабатывает только потому, что в самом начале идет полное очищение флеш в user area. А второй круг уже не сохраняет ...
Специфика Flash:
 

Slacky

Member
pdf:
3. MEMORY ORGANIZATION
Each page has: 256 bytes
Нет там ничего про команду стирания страницы. Значит не будет работать. Но я это ограничение обошел. Пришлось немного код поправить.

Как было. В последнем сохраненном конфиге был флажок active. Если он true, то это последний обновленный архив. Но при этом, когда конфиг нужно было сохранить, нужно было считать предыдущий из флеш, обнулить флаг active и записать на тоже место. А потом уже увеличить адрес на одну страницу (256 байт) и записать. Ну я и хотел перед каждой записью очищать страницу. Не вышло.

Сделал по другому. Убрал флаг active, добавить просто счетчик uint32_t и увеличиваю его при каждой записи конфига. Проверил, погонял по кругу, переход через 0. Нормально все сохраняет и при сбросе считывает последний конфиг с самым большим значением.
 

Slacky

Member
А вот еще глупый вопрос. При каком варианте нужно перед функцией выставлять атрибут _attribute_ram_code_ ?
 

pvvx

Активный участник сообщества
А вот еще глупый вопрос. При каком варианте нужно перед функцией выставлять атрибут _attribute_ram_code_ ?
Это код помещаемый в RAM. Он работает быстрее, ровнее, а не медленно подгружаясь кусками из Flash с выставлением сигнала готовности CPU. Потребление также в RAM меньше, т.к. не работает Flash и система кэширования.
Код, работающий непосредственно с записью и стиранием Flash необходимо помещать в RAM, т.к. Flash на время стирания/записи неактивна...
Обработчики прерываний так-же в RAM, иначе может получиться бардак при записи Flash.
 

pvvx

Активный участник сообщества
Нет там ничего про команду стирания страницы. Значит не будет работать. Но я это ограничение обошел. Пришлось немного код поправить.
PDF
Table2. Commands
Block Erase(32K) 52H
Block Erase(64K) D8H
7.10. 32KB Block Erase (BE) (52H)
7.11. 64KB Block Erase (BE) (D8H)

Как было. В последнем сохраненном конфиге был флажок active. Если он true, то это последний обновленный архив. Но при этом, когда конфиг нужно было сохранить, нужно было считать предыдущий из флеш, обнулить флаг active и записать на тоже место. А потом уже увеличить адрес на одну страницу (256 байт) и записать. Ну я и хотел перед каждой записью очищать страницу. Не вышло.
?
Стирание страницы: Block Erase time: 0.5/0.8s typical - слишком долгое и грозит разрывом связи. По этому и не используется при BLE соединении.
Более короткое стирание сектора ещё как-то проходит, с частичным сбоем связи, если не предусмотрены тайминги-параметры соединения с необходимыми тайм-аутами...

А максимальный блок в 256 байт по причине ограниченного буфера на запись в самой Flash.
1662388545367.png
Но кроме ограничения по размеру, он почему-то привязан к кратности адреса в 256...
 

Slacky

Member
Как было. В последнем сохраненном конфиге был флажок active. Если он true, то это последний обновленный архив. Но при этом, когда конфиг нужно было сохранить, нужно было считать предыдущий из флеш, обнулить флаг active и записать на тоже место. А потом уже увеличить адрес на одну страницу (256 байт) и записать. Ну я и хотел перед каждой записью очищать страницу. Не вышло.
?
Стирание страницы: Block Erase time: 0.5/0.8s typical - слишком долгое и грозит разрывом связи. По этому и не используется при BLE соединении.
Более короткое стирание сектора ещё как-то проходит, с частичным сбоем связи, если не предусмотрены тайминги-параметры соединения с необходимыми тайм-аутами...
Ну я считал, что если мы по адресу уже что-то записали, то чтобы записать по нему повторно, нужно сперва стереть. А стереть весь сектор я не мог, так как в нем могло быть уже несколько сохраненных конфигов. Короче, я отказался от повторной перезаписи и пишу за один раз. А стираю сектор, когда адрес страницы кратен 0x1000.
 

Pashich

New member
Стал обладателем преобразователя интерфейса RS485 to Bluetooth на чипе ai-thinker pb-02 ble 5.0.
Используется для мониторинга солнечного контроллера, EPSOLAR eBox-BLE-01 Box .

С июля китайцы стали продавать конвертер на этом чипе. Подключаю к контроллеру и Galaxy S7 и S5 и ноут Asus его не видит. Сканер BLE поставил и тоже нет.
Китайцы прислали замену из той же серии. Все-равно не видят его (

В телефоне Bluetooth 4.2. По идее обратная совместимость должна быть. Может ли всё-таки оказаться, что этот чип на старых устройствах не сканируется?

Видео внутренностей BLE box
 

pvvx

Активный участник сообщества
Стал обладателем преобразователя интерфейса RS485 to Bluetooth на чипе ai-thinker pb-02 ble 5.0.
Используется для мониторинга солнечного контроллера, EPSOLAR eBox-BLE-01 Box .
Там написано EPEVER BLE RJ45 A BLE Adapter, а не Bluetooth.
Разберитесь в чем отличие, прежде чем писать вопросы...
 

Pashich

New member
Там написано EPEVER BLE RJ45 A BLE Adapter, а не Bluetooth.
Разберитесь в чем отличие, прежде чем писать вопросы...
В описании производителя:
Bluetooth 5.0, compatible with Bluetooth 4.0

Первым делом книжку скачал:
INTRO TO BLUETOOTH LOW ENERGY
by Mohammad Afaneh

Там написано:
There are two types of Bluetooth devices: one is referred to as Bluetooth Classic (BR/EDR),
used in wireless speakers, car infotainment systems, and headsets, and the other is
Bluetooth Low Energy (BLE). BLE, introduced in Bluetooth version 4.0.
These two types of Bluetooth devices are incompatible with each other even though they
share the same brand and even specification document. A Bluetooth Classic device cannot
communicate (directly) with a BLE device. This is why some devices such as smartphones
choose to implement both types (also called Dual Mode Bluetooth devices), allowing them
to communicate with both types of devices.

В спецификации Bluetooth на Galaxy S7 есть фича LE (Low Energy).

Я вот и спрашиваю, может ли устройство с 4.2 LE видеть 5.0 или нет.
 

pvvx

Активный участник сообщества
Я вот и спрашиваю, может ли устройство с 4.2 LE видеть 5.0 или нет.
Может.
В спецификации Bluetooth на Galaxy S7 есть фича LE (Low Energy).
Но для соединения с BLE в смартфоне (и т.д.) требуется специальная программа.
В телефоне есть только драйвер и приемо-передатчик для работы с BLE.
 
Сверху Снизу