Guide de configuration et développement pour modules SIMcom A7670C et microcontrôleur CW32L083

Améliorations prévues pour la prochaine version

Identification des ports réseau IP175GH


Pin 37 LINK_LED0 (J1) : Haut à 3,3V sans câble réseau, bas avec câble connecté.
Pin 36 LINK_LED0 (J2) : Haut à 3,3V sans câble réseau, bas avec câble connecté.

Correction de l'inversion de lignes 485 sur CW32L083

Changement de matériel pour l'écran de 0,96 pouce

Lien vers l'écran de 0,96 pouce

Présentation des schémas et terminologie

Élément Description
1 SMS Service de messagerie courte (Short Messaging Service), premier service de messages textuels.
2 lwIP Pile logicielle de protocole réseau.
3 CNMP Norme réseau cellulaire.
4 BSC Contrôleur de station de base (Base Station Controller), gère 70 à 80 stations de base (BTS).
5 LAC Code de zone de localisation (Location Area Code), utilisé pour la recherche dans les réseaux mobiles.
6 CI Identifiant du secteur d'une antenne sur une station de base. Les numéros CI sous une même station sont séquentiels (par ex. 1,2,3).
7 - Sur certaines tours, des antennes GSM et CDMA sont installées simultanément.
8 GSM Système mondial de communication mobile (Global System for Mobile Communications), basé sur l'accès multiple par répartition dans le temps (TDMA).
9 CDMA Accès multiple par répartition de code (Code Division Multiple Access).
10 CDMA Technologie permettant à plusieurs utilisateurs de communiquer simultanément sur la même fréquence via des codes uniques. Elle améliore la robustesse contre les interférences en élargissant le spectre du signal.

Configuration du module A7670C-LANS

Référence documentaire : A76xx_R3_Series_OpenSDK_Software_User_Guide_V1.04.pdf

Identifiants et versions

Composant Détails
1 A7670C P/N: S2-10CWL-Z32LS ; SN: MP062503715CB08 ; IMEI: 868484070898587 ; Logiciel: 22110B03A7670M6A
2 A7670C La puce ASR 1603 correspond à la révision R2, ASR 1606 à R3, ASR 1602 à R5. Le numéro PN interne permet d'identifier la plateforme et la révision.
3 A7670C Les versions V701 et V702 ont des P/N différents. V702 : S2-10CWL (puce actuelle)
4 A7670C A7670C-LANS utilise la plateforme 1606. A7670C-LNXY (plateforme 1605) ne supporte pas le développement secondaire.
5 A7670C Commande de compilation : make A7670C_LANS_1606_V702_OPENSDK
6 A7670C Fichier GPIO : A7670C_MANS_LANS_GPIO.h. La broche 48 (GPIO8) a pour valeur 77. Pour l'utiliser dans l'interface utilisateur, entrer le paramètre 77.

Ports série


PrintfResp          Sortie sur le port série 1.
sAPI_UartWrite      Sortie via un port série configuré.
sAPI_Debug          Sortie vers CatStudio.
sAPI_UsbVcomWrite   Sortie via le port AT virtuel USB (port 9011).

Processus de configuration et de compilation

Fichier de configuration Kconfig


config HAS_DEMO
    bool "BUILD SIMCOM DEMO"
    default y

Génération du fichier .config


CONFIG_HAS_DEMO=y

Fichier buildOptions.cmake


if(CONFIG_HAS_DEMO AND ((CONFIG_SIMCOM_PROTOCOL_V1 AND EXISTS ${CMAKE_SOURCE_DIR}/sc_demo/V1) OR (CONFIG_SIMCOM_PROTOCOL_V2 AND EXISTS ${CMAKE_SOURCE_DIR}/sc_demo/V2)))
    option(HAS_DEMO "build simcom demo" ON)
endif()

Fichier CMakeLists.txt


if(HAS_DEMO)
    if(DEFINED CQAPI)
        add_subdirectory(./sc_demo/CQ cq_demo)
    else()
        if(CONFIG_SIMCOM_PROTOCOL_V1)
            add_subdirectory(./sc_demo/V1 sc_demo)
        elseif(CONFIG_SIMCOM_PROTOCOL_V2)
            add_subdirectory(./sc_demo/V2 sc_demo)
        endif()
    endif()
endif(HAS_DEMO)

Configuration sous Windows via .config

Configuration sous Windows avec make menuconfig

Prérequis : Installation de Python.

Configuration sous Windows avec make guiconfig

Compilation sous Windows

1. Configuration de l'outil


L'outil make peut être gnumake ou ninja. Par défaut, Windows utilise ninja, Linux utilise make.
Ajouter le chemin tools/win32 au PATH système,
ou copier GNUmake.exe dans C:\windows et le renommer en make.exe (si nécessaire).

2. Compilation


make A7670C_LANS_1606_V702_OPENSDK

Pour compiler la cible, exécuter à la racine : make/gnumake A7670C_LANS
Pour nettoyer un module : make/gnumake clean_ A7670C_LANS
Pour nettoyer tous les modules : make/gnumake clean

3. Le répertoire de sortie A7670C_LANS_1606_V702_OPENSDK sera généré dans le dossier out.

Programmation du firmware (aboot.exe)

Chemin de l'outil : D:\LH_Tools\aboot-tools-2020.10.15-win-x64\aboot.exe

Connecter un câble USB prolongateur à J4. Lancer aboot.exe et sélectionner le fichier à programmer (voir Figure 1). Alimenter le module pour déclencher la mise à jour (voir Figure 2).

Pendant le développeemnt, s'assurer que l'alimentation du module 5G est active.

Ajout de fichiers à la compilation

Pour ajouter une démo : insérer demo_Lh_gps.c dans CmakeLists.txt. Les fichiers d'en-tête (.h) ne nécessitent pas d'ajout explicite.


cmake_minimum_required(VERSION 3.10)
AUX_SOURCE_DIRECTORY(./src/token source_files)
AUX_SOURCE_DIRECTORY(./src/utils source_files)
list(APPEND source_files ./src/simcom_demo.c)
list(APPEND source_files ./src/demo_helloworld.c)
list(APPEND source_files ./src/demo_Lh_gps.c)

Création de paquets de mise à jour (FOTA)

En général, seule l'application (APP) est mise à jour. La mise à jour FOTA complète est nécessaire uniquement si le SDK est modifié. Les mises à jour APP peuvent être transversales, mais pas les mises à jour FOTA.

Mise à jour APP

Mise à jour FOTA du kernel

Processus :
1. Renommer l'image système actuelle en system_old.img
2. Renommer l'image système cible en system_new.img
3. Placer adiff.exe, system_old.img et system_new.img dans le même répertoire (inclure updater.bin si la version actuelle n'a pas de partition updater)

Paramètres de l'outil adiff.exe :
adiff.exe : Outil de création de paquets différentiels
system_old.img : Version originale
system_new.img : Version cible
system_patch.bin : Nom du paquet généré
updater.bin : Fichier de démarrage de mise à jour
-m : Différence système minimale
-p : Différence système complète
-u : Support pour les systèmes sans partition updater


Pour 1602&1606, version complète, sans partition updater :
adiff.exe system_old.img system_new.img system_patch.bin -m -u updater.bin

Pour 1602&1606, version complète, avec partition updater :
adiff.exe system_old.img system_new.img system_patch.bin -m

Mise à jour FOTA du kernel et de l'application simultanément

Étape 1 : Déterminer si updater.bin est nécessaire
Utiliser l'outil aboot pour inspecter le paquet de la version actuelle et vérifier l'existence de la partition updater.

Étape 2 : Vérifier l'état "Current minisys enable.enable 0 stage 0"


Menu de test FOTA :
1. FTP fota  2. HTTP fota  8. Check Current mini sys Status  99. back
État actuel : Current minisys enable.enable 0 stage 0

Étape 3 : Préparation des fichiers
1. system_old.img (version actuelle)
2. system_new.img (version cible)
3. customer_app_old.bin (application actuelle)
4. customer_app_new.bin (application cible)
5. Placer tous les fichiers nécessaires (inclure updater.bin si absent) dans un même dossier.

Notes :
- Chemin de updater.bin : D:\LH_Project\SIMcom\22124B01V06A7670M6A_SDK_240809\SIMCOM_SDK_SET\kernel\A7670C_LANS_1606_V702_OPENSDK\aboot\images\updater.bin
- system.img se trouve dans burn.zip généré lors de la compilation.
- Utiliser adiff.exe de 243 Ko pour une génération valide.

Étape 4 : Génération de system_patch.bin (pour stage 0)


Exemple de commande (pour 1602&1606, sans partition updater) :
adiff.exe system_old.img system_new.img system_patch.bin -m -a1 customer_app customer_app_new.bin -u updater.bin

Ouvrir une invite de commandes en tant qu'administrateur (CMD, pas PowerShell).


Commandes :
D:
cd LH_Project\SIMcom\22124B01V06A7670M6A_SDK_240809\Doc\software\FOTA\old\new_tool_doc_2025-10-15

Étape 5 : Exécution complète
Exemple de sortie après exécution de adiff.exe avec les paramètres spécifiés, détaillant le processus de génération du paquet différentiel.

Consommation énergétique et modes basse consommation

Configuration du mode veille

Le module A76XX doit être inactif (pas de transfert de données, pas de lecture audio, GPS éteint, etc.) pour pouvoir entrer en mode veille.

sAPI_SystemSleepSet

Cette API contrôle l'activation/désactivation de la veille système.

sAPI_SystemSleepExSet

Cette API permet une entrée rapide en veille en libérant la connexion RRC après un délai spécifié sans activité de données.

sAPI_SystemAlarmClock2Wakeup (Réveil programmé)

Cette API programme un réveil après un délai spécifié. Le module entre en veille et se réveille automatiquement sans appel supplémentaire à SystemSleepSet.

Conditions pour les ports série

Conditions pour le port USB

Le port USB doit être déconnecté avant l'entrée en veille. Une connexion USB réveillera le module.

Débogage des problèmes de veille

Si l'appel à sAPI_SystemSleepSet(SC_SYSTEM_SLEEP_ENABLE) ne met pas le module en veille, vérifier :
1. Le GPS n'est pas éteint (vérifier le niveau de la broche de contrôle d'alimentation GPS).
2. Le port USB est toujours connecté (vérifier la broche USB VBAT).
3. Les fuites de courant dans le circuit matériel.
4. Les interruptions continues sur une broche.

Exemple d'utilisation : Acquisition positionnelle GPS/Beidou et stations de base (rapport toutes les 6 secondes)

Consommation de la puce 485 sur MS2005-Lite

La puce 485 sur la version MS2005-Lite consomme environ 13mA.

Points importants

Les chemins d'accès aux fichiers ne doivent pas contenir de caractères chinois.

Microcontrôleur CW32L083 de Wuhan Xinyuan

Protocole de données (propriétaire)

1 octet 1 octet 1 octet 1 octet 1 octet 4 octets 2 octets 2 octets N octets 1 octet
0x55 sum (somme de contrôle) dire (direction) pump (pompe) type seqId (numéro de séquence) fucId (ID fonction) len (longueur des données) Data 0xAA

typedef struct {
    unsigned char   sum;
    unsigned char   dire;
    unsigned char   pump;
    unsigned char   type;
    unsigned int    seqId;
    unsigned short  fucId;
    unsigned short  len;
} FrameHead;

typedef struct {
    FrameHead       head;
    unsigned char   data[FRAME_DSIZE];
} StdFrame;

Programmation en série du CW32L083RCS6

Description

Le CW32L083 est livré avec un bootloader d'usine préprogrammé dans la zone mémoire système (System Memory), inaccessible en écriture. Pour entrer en mode ISP, il faut forcer la broche BOOT0 au niveau haut lors du reset.

Programmation via l'outil CW-Writer

Le CW32L083 utilise son bootloader intégré.

Mise à jour via ymodem_tool.exe (Non supporté actuellement)

Cette méthode nécessite un bootloader personnalisé (IAP) supportant le protocole YMODEM. L'outil ymodem_tool.exe de Wuhan Xinyuan permet de transférer des firmwares via le port série. Connexion via adaptateur USB vers TTL (GND-GND, RX-SWCLK, TX-SWDIO). Court-circuiter les deux broches à côté de la LED avant l'alimentation, puis lancer la mise à jour.

Chemin de l'outil : D:\LH_Tools\Release\ymodem_tool.exe

Mode ISP (Non fonctionnel actuellement)

Flux de travail du mode ISP

Format de données

Indicateurs de réponse

Exemple de données envoyées/reçues

Connexion physique

Problèmes identifiés

Activation de l'interruption par bouton empêchant le démarrage après mise sous tension


// Exemple de code problématique
// NVIC_SetPriority(GPIOC_GPIOD_IRQn, 5);
// NVIC_EnableIRQ(GPIOC_GPIOD_IRQn); // Empêche le démarrage normal

Blocage lors de l'activation de l'interruption d'émission UART5


// Code correct : Gestion de plusieurs UART dans une même routine d'interruption
void UART2_UART5_IRQHandler(void) {
    Lh_UART2_IRQHandler();
    Lh_UART5_IRQHandler();
}

// Code incorrect : Risque de blocage si plusieurs UART déclenchent simultanément
void UART3_UART6_IRQHandler(void) {
    if(Lh_UART3_IRQHandler()==1) { return; }
    if(Lh_UART6_IRQHandler()==1) { return; }
}

Outil PCtoLCD2002 Perfect Edition

Capteur analogique AFE5160 à 8 canaux de 3PEAK

Définition des broches

Correspondance des canaux AFE5160/AFE5161

Canal AFE5160 Canal AFE5161 Usage
CH5 CH3 Capteur de niveau de carburant
CH6 CH4 Capteur de pression d'huile hydraulique

Exemples de données acquises


CH3 : ch5 = 0x11A1, 0x35E8, 0x52C7
CH4 : ch6 = 0x11AC, 0x35ED, 0x528E

Sortie de données double ligne

Exemple de code pour AFE5161


void AFE5161_ReadData(TPAFE51* sensor) {
    uint16_t vals[8] = {0};
    CS_LOW();
    CONVSTA_HIGH();
    CONVSTB_HIGH();
    Delay_us(1);
    for (int bit = 15; bit >= 0; bit--) {
        SCK_HIGH();
        Delay_us(1);
        vals[0] |= (ReadDOUTA() << bit);
        vals[4] |= (ReadDOUTB() << bit);
        SCK_LOW();
        Delay_us(1);
    }
    for (int bit = 15; bit >= 0; bit--) {
        SCK_HIGH();
        Delay_us(1);
        vals[1] |= (ReadDOUTA() << bit);
        vals[5] |= (ReadDOUTB() << bit);
        SCK_LOW();
        Delay_us(1);
    }
    // ... Répéter pour les canaux 3,4,7,8 ...
    CS_HIGH();
    CONVSTA_LOW();
    CONVSTB_LOW();
    for(int i=0; i<8; i++) {
        sensor->channel[i] = vals[i];
    }
}

Capteur analogique AFE5161 à 4 canaux de 3PEAK

Circuit d'application typique

Filtre numérique

Sélection du mode d'interface (Interface série)

Broches PAR/SER/BYTESEL et DB15/BYTESEL permettent de choisir entre :

  1. Lecture parallèle : CS et RD contrôlent DB[15:0]
  2. Lecture par octet : La broche DB14/HBEN détermine l'ordre MSB/LSB.
  3. Lecture série : CS, SCLK, BUSY, FRSTDATA, DOUTA et DOUTB. Les résultats des deux premiers canaux apparaissent sur DOUTA, les deux suivants sur DOUTB (ordre inverse), permettant un débit plus élevé.

Lancement de la conversion

CONVSTA et CONVSTB doivent être mis à l'état haut simultanément pour démarrer l'échantillonnage synchronisé des 8 canaux.

Diagramme temporel de la lecture série

Sortie série

Schéma du circuit

Acquisition des 4 tensions de canal


void AFE5161_Read4Channels(TPAFE51* sensor) {
    uint16_t ch1=0, ch2=0, ch3=0, ch4=0;
    CS_LOW();
    CONVSTA_HIGH();
    CONVSTB_HIGH();
    Delay(10);
    for (int i=15; i>=0; i--) {
        SCK_HIGH();
        Delay(10);
        ch1 |= (ReadDOUTA() << i);
        ch3 |= (ReadDOUTB() << i);
        SCK_LOW();
        Delay(10);
    }
    for (int i=15; i>=0; i--) {
        SCK_HIGH();
        Delay(10);
        ch2 |= (ReadDOUTA() << i);
        ch4 |= (ReadDOUTB() << i);
        SCK_LOW();
        Delay(10);
    }
    CS_HIGH();
    CONVSTA_LOW();
    CONVSTB_LOW();
    sensor->channel[0] = ch1; // CH1
    sensor->channel[1] = ch2; // CH2
    sensor->channel[2] = ch3; // CH3
    sensor->channel[3] = ch4; // CH4
}

Données du capteur de niveau d'huile


Exemples de valeurs AD lues :
20878, 20877, 20923, 19391, 16765, 14355, 11321, 10017, 8409, 6522, 4174...

Relation AD-Courant pour le niveau d'huile

Canal 3 : AD=20878 -> 99% -> 20.878mA ; AD=14336 -> 60% -> 14.336mA ; AD=4176 -> 0% -> 4.176mA.

Détails du capteur de niveau


Bas : 0x11A8 (4520, 4.520mA)
Haut : 0x52B3 (21171, 21.171mA)

Diagramme de câblage du capteur de niveau Puce de pont série-ethernet CH9120


Configuration en mode client (pour MS2005-Dev)

Chemin : D:\LH_Tools\CH9120EVT\EVT\CH9120NetModuleConfig.exe
Après la recherche d'appareil, double-cliquer sur le nom affiché pour remplir tous les champs de configuration.

Configuration en mode serveur

Chemin et procédure identiques au mode client.

Configuration par défaut du CH9120

Broches d'état du CH9120

Broche Nom Description Niveau actif Indication
15 LINK État de connexion PHY Bas Bas : Lien physique établi. Haut : Pas de lien.
14 ACT Activité de données Ethernet - Clignotement : Transfert de données en cours.

Commutateur Ethernet IP175GH

Signification des LED verte et jaune

Couleur des indicateurs

Obtention de l'état de liaison et d'activité via microcontrôleur

L'interaction se fait via les interfaces de gestion SMI (Serial Management Interface) ou SPI en lisant les registres internes de la puce.

Extraction de l'état via les registres

Procédure via l'interface SMI (réf. datasheet "4.6 Serial management interface") :

Interface de gestion série

Adresse PHY

Registre de contrôle spécial

Registre de statut spécial

Adresses des registres

Adresses PHY des ports

Port 0 : 2 ; Port 1 : 3 ; Port 2 : 4 ; Port 3 : 6 ; Port 4 : 7

Automate programmable SIAETC-S7-200 (PLC)

Notes

Problèmes

Problème 1 : Les données temps réel incluent des adresses non enregistrées, que le PC ne stocke pas lors de la requête.

Problème 2 : (À décrire)

Contrôleur d'affichage ST7735S

Sélection du type d'interface

Direction d'affichage (pour résolution 128x160)

Paramètres MADCTL (MY, MX, MV, ML, RGB, MH) :
Exemples de valeurs : 0x08, 0xC0, 0x60, 0xA0.

Écriture de pixels (RGB 5-6-5 bits, 65k couleurs)

Commandes d'affichage

NORON (13h) : Mode d'affichage normal.
PTLON (12h) : Mode d'affichage partiel.
INVOFF (20h) / INVON (21h) : Inversion d'affichage.
GAMSET (26h) : Définition de la correction gamma.
DISPOFF (28h) / DISPON (29h) : Activation/désactivation de l'affichage.
CASET (2Ah) / RASET (2Bh) : Définition des adresses de colonnes/lignes.
RAMWR (2Ch) : Écriture en mémoire d'image.

Exemples d'utilisation (128x160)

Mode normal (MX=MY=ML='0', SMX=SMY='0').
Mode partiel (définition de PSL et PEL).

Paramètres pour d'autres résolutions

Exemples pour 132x162 (GM[1:0]="00").

Direction d'écriture des données (Frame Data Write Direction)

Exemples de défilement (Rolling Scroll) avec ML=0 et ML=1.

Résumé des commandes importantes

PTLON (12h), NORON (13h), INVOFF (20h), INVON (21h), GAMSET (26h), DISPOFF (28h), DISPON (29h), CASET (2Ah), RASET (2Bh), RAMWR (2Ch), RAMRD (2Eh), PTLAR (30h), SCRLAR (33h), IDMOFF (38h), IDMON (39h), COLMOD (3Ah), RDID1 (DAh), RDID2 (DBh), RDID3 (DCh).

Configuration de la mémoire d'image (Display Data RAM)

Exemples de configurations pour GM[1:0]="00", "01", "11".

Interfaces parallèles (8-bit, 16-bit, 9-bit)

Optimisation de la consommation

Optimisation des sources d'horloge

Configuration des broches (cruciale !)

Alimentation des périphériques

Alimenter les capteurs, écrans, modules Wi-Fi uniquement lorsque nécessaire.

Réduction de la consommation des résistances de tirage

Éviter les faibles valeurs (1kΩ). Préférer 10kΩ à 100kΩ, ou utiliser les résistances internes du MCU.

[Journal de débogage :]
-ch9120_ReadPLCData–sPlcState=1–num=10,scanNum=3
getInfoFunscanNum=3,addS=1VD2700,getBitLen=1128
getInfoFunscanNum=3,addE=1VD2840,getBitLen=1128

Exemple MS2005-Dev (consommation réduite à ~5mA)

Action Description
Mise en veille du module SIMcom sAPI_SystemSleepSet(SC_SYSTEM_SLEEP_ENABLE)
Désactivation de l'alimentation GPS -
Désactivation de l'alimentation NTC -
Désactivation de l'alimentation SW -
Désactivation de l'alimentation 485 -

Exemple MS2005-Lite (consommation réduite à ~3mA)

Action Description
Mise en veille du module SIMcom sAPI_SystemSleepSet(SC_SYSTEM_SLEEP_ENABLE)
Désactivation de la localisation Beidou -
Puce 485 non montée Élimine la consommation statique de 13mA.

Étiquettes: SIMcom A7670C CW32L083 OpenSDK firmware upgrade

Publié le 7 août à 01h18