Механізм розробки користувача програми та завантаження його в модуль доступний як під операційною системою Linux, так і Windows. У цій статті ми докладно розглянемо те, як скориставшись прикладами з SDK
Перед написанням статті один мій знайомий, далекий від розробки під Linux, попросив максимально детально підійти до опису процесу розробки власної програми під модуль SIM7600E-H. Критерієм оцінки доступності подачі матеріалу стала фраза так, щоб Я зрозумів.
Запрошую ознайомитись з тим, що вийшло.
Стаття регулярно доповнюється та оновлюється
Прелюдія
Зазвичай модулі стільникового зв'язку використовуються лише передачі даних, голосових викликів, передачі СМС тощо. Все це робиться за допомогою АТ-команд, що відправляються із зовнішнього керуючого мікроконтролера. Але є категорія модулів, які дозволяють виконувати код користувача, що завантажується ззовні. У деяких випадках це значно скорочує загальний бюджет пристрою, дозволяючи поставити на плату простіший (а також бюджетний) мікроконтролер або відмовитися від нього зовсім. З появою LTE модулів, керованих ОС Android або Linux та їх потужними ресурсами, можна вирішувати будь-які завдання, доступні популярним процесорам. У цій статті йтиметься про SIM7600E-H, керований ОС Linux. Ми розглянемо, як завантажити та запустити виконуваний додаток.
Багато в чому матеріал базується на документі "SIM7600 Open Linux development quide", але деякі доповнення, і в першу чергу, російськомовна версія будуть корисні. Стаття допоможе розібратися тим, хто тільки починає освоєння модуля дійти до завантаження демонстраційної програми та дасть необхідні навички для подальшої роботи.
Коротко про те, хто такий SIM7600E-H
SIM7600E-H – це модуль побудований на базі процесора ARM Cortex-A7 1.3GHz від Qualcomm, що має операційну систему Linux (ядро 3.18.20) усередині, здатний працювати з європейськими (в т.ч. та російськими) діапазонами частот 2G/3G/ LTE, що підтримує Cat.4, що забезпечує максимальну швидкість завантаження до 150Mbps та вивантаження до 50Mbps. Багата периферія, індустріальний температурний діапазон і наявність вбудованої GPS навігації/ГЛОНАСС перекривають будь-які вимоги до сучасного модульного рішення в М2М тематиці.
Огляд системи
Модуль SIM7600E-H базується на операційній системі Linux (ядро 3.18.20). У свою чергу, файлова система побудована на базі файлової системи UBIFS (Unsorted Block Image File System).
До важливих особливостей цієї файлової системи належать:
- працює з розділами, дозволяє створювати, видаляти або змінювати їх розмір;
- забезпечує вирівнювання запису по всьому об'єму носія;
- працює з Bad-блоками;
- мінімізує можливість втрати даних при аварійному відключенні живленні або інших збоях;
- ведення журналів.
Опис взято
Тобто. Цей тип файлової системи ідеально підходить для жорстких умов роботи модуля та можливих проблем з живленням. Але це не означає, що умови нестабільного живлення будуть очікуваним режимом роботи модуля, це говорить лише про більшу життєздатність пристрою.
Пам'ять
Розподіл областей пам'яті побудовано так:
Потрібно виділити три основні області:
ubi0:rootfs – доступний тільки для читання та містить саме ядро Linux
ubi0:usrfs – використовується переважно для користувальницької програми та зберігання даних
ubi0:cahcefs – зарезервовано для FOTA оновлень. Якщо доступного простору буде недостатньо для завантаження оновлення – система видаляє файли, що не використовуються, і таким чином вивільнить місце. Але з міркувань безпеки - не варто розташовувати там свої файли.
Усі три розділи розподілені так:
Файлова система
Розмір
Використаний
наявний
Використовувати%
Встановлено
ubi0:rootfs
40.7M
36.2M
4.4M
89%
/
ubi0:usrfs
10.5M
360K
10.1M
3%
/ data
ubi0:cachefs
50.3M
20K
47.7M
0%
/ кеш
Доступна функціональність
Як було згадано вище, модуль побудований з урахуванням чіпсету Cortex A7 від Qualcomm. Було б неправильно не надати таке високопродуктивне ядро для обробки програми користувача і розвантаження основного процесора пристрою, переклавши на модуль деяку частину програми.
Для програми користувача нам будуть доступні наступні режими роботи периферії:
Pin №
ІМ'Я
Sys GPIO No.
Дія за замовчуванням
Func1
Func2
Потягнути
Wakeup interrupt
6
SPI_CLK
-
UART1_RTS
-
-
B-PD
-
7
SPI_MISO
-
UART1_Rx
-
-
B-PD
-
8
SPI_MOSI
-
UART1_Tx
-
-
B-PD
-
9
SPI_CS
-
UART1_CTS
-
-
B-PD
-
21
SD_CMD
-
Флеш-картка
-
-
B-PD
-
22
SD_DATA0
-
Флеш-картка
-
-
B-PD
-
23
SD_DATA1
-
Флеш-картка
-
-
B-PD
-
24
SD_DATA2
-
Флеш-картка
-
-
B-PD
-
25
SD_DATA3
-
Флеш-картка
-
-
B-PD
-
26
SD_CLK
-
Флеш-картка
-
-
B-PN
-
27
SDIO_DATA1
-
WLAN
-
-
B-PD
-
28
SDIO_DATA2
-
WLAN
-
-
B-PD
-
29
SDIO_CMD
-
WLAN
-
-
B-PD
-
30
SDIO_DATA0
-
WLAN
-
-
B-PD
-
31
SDIO_DATA3
-
WLAN
-
-
B-PD
-
32
SDIO_CLK
-
WLAN
-
-
B-PN
-
33
GPIO3
GPIO_1020
MIFI_POWER_EN
GPIO
MIFI_POWER_EN
B-PU
-
34
GPIO6
GPIO_1023
MIFI_SLEEP_CLK
GPIO
MIFI_SLEEP_CLK
B-PD
-
46
АЦП2
-
ADC
-
-
-
-
47
АЦП1
-
ADC
-
-
B-PU
-
48
SD_DET
GPIO_26
GPIO
GPIO
SD_DET
B-PD
X
49
СТАТУС
GPIO_52
Статус
GPIO
Статус
B-PD
X
50
GPIO43
GPIO_36
MIFI_COEX
GPIO
MIFI_COEX
B-PD
-
52
GPIO41
GPIO_79
BT
GPIO
BT
B-PD
X
55
SCL
-
I2C_SCL
-
-
B-PD
-
56
ПДР
-
I2C_SDA
-
-
B-PU
-
66
Фондова біржа РТС
-
UART2_RTS
-
-
B-PD
-
67
CTS
-
UART2_CTS
-
-
B-PD
-
68
RxD
-
UART2_Rx
-
-
B-PD
-
69
RI
-
GPIO(RI)
-
-
B-PD
-
70
DCD
-
GPIO
-
-
B-PD
-
71
TxD
-
UART2_Tx
-
-
B-PD
-
72
DTR
-
GPIO(DTR)
-
-
B-PD
X
73
PCM_OUT
-
PCM
-
-
B-PD
-
74
PCM_IN
-
PCM
-
-
B-PD
-
75
PCM_SYNC
-
PCM
-
-
B-PD
-
76
PCM_CLK
-
PCM
-
-
B-PU
-
87
GPIO77
GPIO77
BT
GPIO
BT
B-PD
-
Погодьтеся, перелік значний і зверніть увагу: частина периферії використовується для роботи модуля як роутер. Тобто. на базі такого модуля можна зробити невеликий роутер, який роздаватиме інтернет по Wi-Fi. До речі, є вже готове рішення, називається SIM7600E-H-MIFI і є miniPCIE карткою, з напаяним модулем SIM7600E-H і кількома антенними висновками, один з них є антеною Wi-Fi. Втім, це вже тема окремого матеріалу.
Середа (не день тижня)
З того, що вам потрібно, недоступного для завантаження у вільному доступі - SDK, яку можна запросити у свого дистриб'ютора.
Установка утиліт для роботи з модулем
Тут і далі ми будемо працювати під Windows як найбільш знайому ОС більшості користувачів.
Нам потрібно за кілька простих кроків встановити необхідне ПЗ для подальшого освоєння роботи з модулем:
- GNU / Linux
- Cygwin
- драйвера
- Азіатський банк розвитку
Встановлення GNU/Linux
Для складання програми можна скористатися будь-яким сумісним з ARM-Linux компілятором. Ми ж скористаємося SourceryCodeBenchLiteARM GNU/Linuxtranslater доступним для завантаження
Щоб усі компоненти були встановлені правильно, залишу кілька скріншотів процесу встановлення. В принципі, в установці немає нічого складного.
Щоб усі компоненти були встановлені правильно, залишу кілька скріншотів процесу встановлення. В принципі, в установці немає нічого складного.
- Приймаємо ліцензійну угоду
- Вказуємо папку установки
- Необхідні компоненти залишаємо без змін
- Залишаємо як є
- Декілька разів “Next”, “Install” і в принципі все
Установка Cygwin
Далі для розробки потрібно буде набір бібліотек і утиліт з набору наданого
В установці Cygwin немає нічого складного, єдине що потрібно буде вибрати - дзеркало, з якого установник скачає необхідні файли, вибираємо будь-яке та встановлюємо, а також набір утиліт та бібліотек, залишаємо вибраними усі доступні бібліотеки та утиліти.
установка драйверів
Після того, як модуль буде підключений до ПК потрібно встановити драйвер. Їх можна запросити у свого дистриб'ютора (рекомендується). Шукати в Інтернеті самостійно не рекомендую, т.к. може знадобитися багато часу на пошук із чим був пов'язаний конфлікт пристроїв.
Серед виділених портів бачимо такі:
Windows
Linux
Опис
SimTech HS-USB Diagnostics
USB послідовний
Діагностичний інтерфейс
SimTech HS-USB NMEA
USB послідовний
GPS NMEA Interface
SimTech HS-USB AT Port
USB послідовний
AT port Interface
SimTech HS-USB Modem
USB послідовний
Modem port Interface
SimTech HS-USB Audio
USB послідовний
Інтерфейс USB Audio
SimTech HS-USB WWAN Adapter
USB Net
NDIS wwan Interface
Android Composite ADB інтерфейс
USB ADB
Android add debug port
Як ви напевно звернули увагу, серед портів на скріншоті немає USB ADB, це через те, що порт ADB в модулі за замовчуванням закритий і його потрібно включити, відправивши команду 'AT+CUSBADB=1' в АТ-порт модуля і перезавантажити його ( це можна зробити командою 'AT+CRESET').
У результаті отримаємо необхідний інтерфейс у диспетчері пристроїв:
З драйверами закінчили, переходимо до ADB.
установка ADB
Заходимо на офіційний сайт Android Developer з
Качаємо та розпаковуємо отриманий архів у корінь диска C.
Змінні середовища
Після встановлення Cygwin потрібно додати шлях Cygwin/bin/ у змінні середовища розробки (Класична Панель керування → Система → Додаткові параметри системи → Додатково → Змінні середовища → Системні змінні → Path → Змінити) так як показано на скріншоті нижче:
Аналогічним чином додаємо шлях до завантаженого та розпакованого архіву ADB в корінь диска C.
Кілька разів натискаємо ОК та перезавантажуємо комп'ютер.
Після перезавантаження можна легко перевірити, чи коректно працює ADB, відкривши командний рядок (Win+R → cmd) і набравши команду 'adb version'. Отримаємо приблизно такий результат:
Підключимо модуль до ПК (якщо так сталося, що відключили) і перевіримо чи бачить його ADB командою 'adb devices':
Готово, на цьому налаштування підключення до модуля завершено, і ми можемо запустити shell для роботи з модулем.
Розпакування та компіляція SDK
Після того як ми отримали доступ до shell і можемо почати роботу з командним рядком модуля, спробуємо скомпілювати наш перший додаток для завантаження в модуль.
Із цим у багатьох можуть виникнути складнощі! Т.к. модуль працює на операційній системі Linux, щоб уникнути колізій при компіляції коду під Windows - найкраще компілювати в рідному середовищі - Linux.
Не будемо докладно зупинятися на тому, як без Linux і бажання встановлювати його на свою машину, можна встановити його на віртуальну. Ми скористаємося VirtualBox, встановимо Ubuntu версії 20.04 (актуальна версія на момент написання статті) і вже під нею почнемо роботу з компіляторами, SDK і т.п.
Переходимо в середу Linux та розпаковуємо архів, отриманий від дистриб'ютора.
simcom@VirtualBox:~/Desktop/OpenLinux$ sudo tar -xzf MDM9x07_OL_2U_22_V1.12_191227.tar.gz
Переходимо до каталогу sim_open_sdk та додаємо оточення:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ cd sim_open_sdk
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ source sim_crosscompile/sim-crosscompile-env-init
Залишаємося в цій же папці і наступні команди виконуємо, перебуваючи в ній.
Встановлюємо бібліотеку libncurses5-dev, якщо вона не була встановлена:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ sudo apt-get update && sudo apt-get install libncurses5-dev -y
Python, якщо він так само не був встановлений:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ sudo apt-get install python -y
та gcc:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ sudo apt-get install gcc
Компіляція:
Тепер нам потрібно скомпілювати кілька файлів, послідовно виконуємо наступні команди.
Якщо при компіляції вискочить вікно налаштування ядра – просто вибираємо Exit і повертаємось у консоль, у нас зараз немає потреби конфігурувати ядро.
Виконуємо:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ make
Компілюємо bootloader:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ make aboot
Компілюємо ядро:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ make kernel_menuconfig
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ make kernel
Компілюємо кореневу файлову систему:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ make rootfs
Для користувачів Linux буде актуальним скомпілювати драйвер модуля:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ make kernel_module
Скомпілюємо демо:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ make demo
Після чого в директорії sim_open_sdk/output з'явиться кілька нових файлів:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ ls output/
appsboot.mbn boot.img demo_app helloworld system.img
демо
Спробуємо завантажити демонстрацію в наш модуль та подивимося, що з цього вийде.
Завантаження
У директорії sim_open_sdk ми можемо побачити файл demo_app. Забираємо його та переносимо в корінь диска C на ПК до якого підключено модуль. Після чого запускаємо командний рядок Windows (Win+R -> cmd) та вводимо:
C:>adb push C:demo_app /data/
Консоль нам повідомить:
C:demo_app: 1 file pushed, 0 skipped. 151.4 MB/s (838900 bytes in 0.005s)
Це означає, що файл був успішно надісланий на модуль і нам залишається лише запустити його. Не будемо зволікати.
Виконуємо:
C:>adb shell
Розширюємо права завантаженого файлу:
/ # cdhmod 777 /data/demo_app
І запускаємо:
/ # /data/demo_app
У цій же консолі модуль повідомить нам наступне:
SDK_VER : SIM_SDK_VER_20191205
DEMO_VER: SIM_SDK_VER_20191205
Please select an option to test from the items listed below.
1. WIFI 2. VOICE CALL
3. DATA CALL 4. SMS
5. WDS(APN) 6. NAS
7. AT 8. OTA
9. TTS 10. GPIO
11. GPS 12. Bluetooth
13. TCP/UDP 14. Timer
15. ADC 16. I2C
17. UIM(SimCard) 18. DMS(IMEI,MEID)
19. UART 20. SPI
21. Version 22. Ethernet
23. FTP 24. SSL
25. HTTP(S) 26. FTP(S)
27. MQTT(S) 28. ALSA
29. DEV 30. AUDIO
31. JSON 32. LBS
99. EXIT
Option >
Давайте подивимося IMEI модуля, введемо 7 (перехід у командний режим) і після введемо 5:
Please select an option to test from the items listed below.
1. WIFI 2. VOICE CALL
3. DATA CALL 4. SMS
5. WDS(APN) 6. NAS
7. AT 8. OTA
9. TTS 10. GPIO
11. GPS 12. Bluetooth
13. TCP/UDP 14. Timer
15. ADC 16. I2C
17. UIM(SimCard) 18. DMS(IMEI,MEID)
19. UART 20. SPI
21. Version 22. Ethernet
23. FTP 24. SSL
25. HTTP(S) 26. FTP(S)
27. MQTT(S) 28. ALSA
29. DEV 30. AUDIO
31. JSON 32. LBS
99. EXIT
Option > 7
Please select an option to test from the items listed below.
1. get Module Version 2. get CSQ
3. get CREG 4. get ICCID
5. get IMEI 6. get CIMI
99. back
Option > 5
IMEI: 867584030090489
Please select an option to test from the items listed below.
1. get Module Version 2. get CSQ
3. get CREG 4. get ICCID
5. get IMEI 6. get CIMI
99. back
Option >
Таким чином, ми побачимо IMEI модуля.
В якості висновку
Сподіваюся, нам вдалося скласти загальне уявлення про те, як розпочати роботу з модулем. У наступних статтях ми докладніше розглянемо можливості, які надає платформа SIM7600E-H, а також те, як можна віддалено оновити власну програму в модулі.
Запрошую ставити запитання у коментарях, а також вказати який аспект можливостей модуля слід відобразити у наступних статтях.
Джерело: habr.com