Enregistrement de débogage de la fonction d'appel vocal du module 5000-31 Huawei 5G (NAU88C10) .md

Auteur : Younix.Zhang

demande

Le fournisseur du module 5G a déclaré qu'il prend en charge la fonction d'appel (le module a une sortie PCM), mais il n'y a pas de solution de codec correspondante, nous devons donc utiliser le codec pour accepter l'audio PCM

[Échec du transfert de l'image du lien externe. Le site source dispose peut-être d'un mécanisme de liaison anti-sangsue. Il est recommandé d'enregistrer l'image et de la télécharger directement (img-fzCeoTTs-1593659409167) (./ images / 1593657197068.png)]

conception matérielle

[Échec du transfert de l'image du lien externe. Le site d'origine dispose peut-être d'un mécanisme de lien anti-sangsue. Il est recommandé d'enregistrer l'image et de la télécharger directement (img-IQ5CNL6A-1593659409170) (./ images / 1593657259793.png)]

[Échec du transfert de l'image du lien externe. Le site source dispose peut-être d'un mécanisme anti-sangsue. Il est recommandé d'enregistrer l'image et de la télécharger directement (img-60CJs2ED-1593659409172) (./ images / 1593657301684.png)]

débogage

Le débogage est divisé en deux parties

  1. Passer et recevoir des appels via les commandes AT. Ceci est standard.
  2. Configurez le registre du codec via la commande AT. Ceci est une propriété privée de Huawei.

Test de commande AT

Connectez l'interface USB de l'ordinateur hôte (Ubuntu16.04) et le module Huawei 5000-31.

ls /dev/ttyUSB*

peut être vu

ttyUSB0 ttyUSB1 ttyUSB2 ttyUSB3

Selon le manuel de Huawei, la commande AT interagit via le port PCUI, qui est ttyUSB1.

Alors j'ai passé

cat /dev/ttyUSB1 

Surveiller l'acceptation des commandes AT.
par

echo "ATI" > /dev/ttyUSB1

Envoyez des commandes AT.

# 发送查询模组信息命令
echo "ATI" >/dev/ttyUSB1
# 查看模组返回信息
Manufacturer: Huawei Technologies Co., Ltd.
Model: MH5000-31
Revision: 11.770.00.03.00
IMEI: 867395040011807
+GCAP: +CGSM,+DS,+ES

1. Débogage de la fonction téléphonique

La numérotation téléphonique, la réponse et les autres fonctions sont les mêmes que les commandes AT standard

# 拨号
echo "ATD13212341234;" >/dev/ttyUSB1
# 接听
echo "ATA" > /dev/ttyUSB1
# 挂断: 0 为所有用户
echo "ATH0" > /dev/ttyUSB1

2. Débogage de la fonction audio

Regardez d'abord les commandes liées au codec prises en charge par le module

AT^SETCODECREG=<codec_addr>,<register_addr>,<register_data>

[Échec du transfert de l'image du lien externe. Le site source dispose peut-être d'un mécanisme anti-sangsue. Il est recommandé d'enregistrer l'image et de la télécharger directement (img-eM2rn0Pw-1593659409173) (./ images / 1593657996132.png)]

AT^GETCODECREG=<codec_addr>,<register_addr>

[Échec du transfert de l'image du lien externe. Le site source dispose peut-être d'un mécanisme anti-sangsue. Il est recommandé d'enregistrer l'image et de la télécharger directement (img-WY7T9yp2-1593659409174) (./ images / 1593658013417.png)]

Regardez le tableau des registres du Codec NAU88C10 et trouvez-en un

Insérez la description de l'image ici

Problème 1

Voici le problème: le module 5000-31 ne peut prendre en charge que 1 octet, soit 8 bits, pour lire et écrire dans le registre Codec.
Mais les données de registre de Codec sont de 9 bits (0-8)
.

Examinez de plus près l'opération d'écriture i2c de Codec:

Insérez la description de l'image ici

On peut voir que register_addr est A6-A0, et register_data est D8-D0,
donc nous devons seulement décaler le bit d'adresse de registre que nous voulons vraiment opérer vers la gauche de 1 bit, plus D8, comme register_addr au module 5000-31 à appeler.

Par exemple:
je veux écrire 0x01 et écrire 0x11f = 1 0001 1111.
Ensuite, les paramètres que mon module actuel devrait utiliser sont
<codec_addr> = 1a,
<register_addr> = 01 décalé à gauche de 1 bit à 02, et D8 est 1, et enfin obtenir 3
<register_data> = D7-D0 est 1f.
La commande AT correspondante est

AT^SETCODECREG=1a,3,1f

Voici un autre ensemble de données

[8810/Audio Control] 
0x4 = 0x58
0x5 = 0x0
0x6 = 0x0
0x7 = 0xa
0xa = 0x8
0xb = 0xff
0xe = 0x100
0xf = 0xff

La commande AT correspondante est

echo "at^setcodecreg=1a,8,58" > /dev/ttyUSB1
echo "at^setcodecreg=1a,a,00" > /dev/ttyUSB1
echo "at^setcodecreg=1a,c,0" > /dev/ttyUSB1
echo "at^setcodecreg=1a,e,0a" > /dev/ttyUSB1
echo "at^setcodecreg=1a,14,08" > /dev/ttyUSB1
echo "at^setcodecreg=1a,16,ff" > /dev/ttyUSB1
echo "at^setcodecreg=1a,1d,00" > /dev/ttyUSB1
echo "at^setcodecreg=1a,1e,ff" > /dev/ttyUSB1

Problème 2

Je ne sais pas si l'écriture a réussi. Parce que la lecture du module 5000-31 est également de 1 octet, et lorsque le codec est lu, il renvoie 2 octets.
Parce que nous pouvons voir sur la fiche technique

Insérez la description de l'image ici
Le premier octet renvoyé par Codec est le bit haut.
Ainsi, les données de retour obtenues par la commande AT GETCODECREG sont les 1 octets de poids fort.

Il n'y a aucun moyen, vous ne pouvez utiliser qu'un analyseur logique pour capturer des données I2C. Vérifiez si l'écriture réelle est réussie.
De manière générale, si la commande AT renvoie OK, l'écriture doit être réussie.

Problème 3 Problème de configuration du registre du codec

Le tableau de configuration des registres donné par Codec FAE étant incorrect, il n'y a pas de son dans le micro et le haut-parleur. J'ai été retardé dans ce domaine pendant presque une journée.

Il s'agit de la phase de débogage relativement indépendante du codec. Configurez chaque registre en fonction du canal. Plus maintenant.
Ceux qui sont intéressés par la consultation de la configuration du registre du 88C10 peuvent communiquer dans les commentaires.

Je suppose que tu aimes

Origine blog.csdn.net/dearsq/article/details/107080349
conseillé
Classement