суббота, 2 декабря 2017 г.

УСПД GME920G

Попало в руки несколько железок GME920G.

GME920G - устройства сбора и передачи данных УСПД серии GME920 (далее - УСПД) предназначены для учета энергоресурсов  бла-бла-бла.

На самом деле, linux устройство на AT91RM9200/64Mb RAM + serial порты + модем + 4 IO порта, которое легко можно переделать для различных нужд.

Самое главное, у коллеги была документация (GME920G-UserManual-V1_3.pdf), за что ему огромное спасибо.
В интернете ничего толкового нет (видимо, было когда-то, но исчезло вместе с сайтом производителя)

У меня используется в качестве термометра с передачей данных через SMS.

На https://github.com/rawaaw/GME920G.git выложил документацию, прошивки и кое-что полезное, что обнаружил, пока ковырялся с железкой.



понедельник, 15 мая 2017 г.

x-hdl 4.1.4 и 4.2.5. генерация лицензионного файла

x-hdl - утилита для конвертации VHDL <> Verilog HDL.
Производитель X-Tek Corporation.

Ниже, описана генерация лицензии для x-hdl 4.1.4 и 4.2.5 (для него нужна nodelocled лицензия) в домашних условиях.

============
файл с лицензией имеет вид:

[ece21eddb370f0e7f0b4de65d144cd907413bc2d]
id=1
feature = XHDL
version = 2007.0519
start = 09-May-2007
end = 19-May-2016
count = 1
server1 = d43d7eb9df76
servername1 = home
wan = 0
options = 0
supercedes = 0
nodelocked = 0

или

[e2613d86fc4bab0913c943c595b1b660e045bc40]
id=1
feature = XHDL
version = 2007.0519
start = 09-May-2007
end = 19-May-2016
count = 1
server1 = d43d7eb9df76
servername1 = home
wan = 0
options = 0
supercedes = 0
nodelocked = 1
============

d43d7eb9df76 - mac адрес интерйса на машине (lower case !!!). В 4.1.4 можно посмотреть с помощью xlmhostid.exe
серверов может быть до трех штук (server1-server3).
В строчке для генерации подписи сейчас для server2, server3 пусто :::

============
подпись, и она же номер лицензии - это sha1 от :

02231960072019601023198201041984 и
1:XHDL:2007.0519:19-May-2016:09-May-2007:1:d43d7eb9df76:::false:false:0:0

т.е. делаем файл (одна строка без <cr> !!!)
==
022319600720196010231982010419841:XHDL:2007.0519:19-May-2016:09-May-2007:1:d43d7eb9df76:::false:false:0:0
==

и openssl sha1 файл. 40байтовый хэш вставляем в [...]

==========
пример nodelocled = 1 лицензии:

02231960072019601023198201041984
1:XHDL:2007.0519:19-May-2016:09-May-2007:1:D43D7EB9DF76:::false:true:0:0

654f1c18ace8a621acf060069a4c5c438dfa0e5e

==========

вторник, 11 апреля 2017 г.

stm32, windows, cdc-eem

STM32 в качестве ethernet адаптера.


Некоторое время назад обнаружил на aliexpress дешевые платы на STM32F103C8T6.
Например: STM32-Minimum-System-Development-Board-Module
В качестве игрушки то, что надо: спалить не жалко, писать под stm32 не сложнее, чем под Arduino (CubeMX + uVision + HAL), отлаживаться гораздо проще и удобнее, а производительность и возможности даже сравнивать нельзя.

Для удобства обмена данными давно хотелось видеть контроллер как ip устройство, которое могло бы подключать к хосту с Windows (хотя бы Win10, лучше к Win7-10).

Естественно, сразу возник вопрос, какую модель реализовывать: RNDIS,  CDC-EEM , CDC-ECM, CDC-NCM ?

RNDIS уже делали (например, https://habrahabr.ru/post/274663/ ) - неинтересно;

ECM, NCM - для винды нет драйверов;

Кстати, для NCM (линуксовый хост <> stm32) есть проект https://www.keil.com/pack/doc/mw/USB/html/dev_cdc_ncm.html, но с использованием Keil RTX.

EEM делали, но никакой конкретики (по сути реклама) не описано:  https://habrahabr.ru/company/metrotek/blog/264293/.

EEM в исходниках для контроллеров есть, но не для cortex и не на C (xmos).
Можно подсмотреть как устроены дескрипторы устройства: https://github.com/xcore/sc_usb/blob/master/app_example_usb_eem/src/endpoint0.xc (hiSpdConfDesc).

Что касается хоста, в Win10 обнаружился драйвер usbnet.sys, который, вроде бы, служит для связи с EEM устройством, судя по .inf файлу. У Microsoft никакой конкретики не нашел.
Но, как выяснилось, хотя на дескриптор (class 02/subclass 0c/protocol 07) он устанавливается, получаем статус - "требуется дальнейшая установка устройства" (или что-то подобное).

Сторонние производители драйвера делают, но хотят денег и работают только с конторами-производителями железа. Тоже неинтересно.
Например:
http://www.mcci.com/mcci-v5/hostside/eem_drivers.html
http://www.belcarra.com/2012/01/belcarra-eem-configuration-extension.html
http://www.thesycon.de/eng/prod_usbdevicedriver.shtml

На некоторое время идея была зарошена,
пока на сайте HID global случайно не обнаружился  среди их дистрибутивов драйвер eem:
https://www.hidglobal.com/file/hidglobalusbcdceemdriverv25100zip .

Как оказалось, это драйвер от Thesycon Software Solutions (ссылка выше) с кастомизированным VID/PID.
Так как драйвер для винды нашелся - появился смысл сделать eem-device.
Использовалось:
плата с STM32F103C8T6
драйвера EEM для win7-10
сниффер -  USBlizer и Wireshark c USBpcap
в качестве "рыбы" в CubeMX был сгенерирован пример для CDC-ACM под Keil uVision.

На текущий момент реализовано arp и icmp echo request/reply (т.е. устройство отвечает на ping).
Исходники  https://github.com/rawaaw/cdc-eem-f103
Там же драйвера, извлеченные из msi.

При подключении устройство опознается как ethernet адаптер.

Вручную адаптеру нужно присвоить адрес 10.11.12.1/24.
Контроллер - устройство с адресом 10.11.12.2/24 и mac-адресом 11.12.13.13.14.15.

Устройство видно в arp таблице, и оно отвечает на ping.