Wayar SIP akan STM32F7-Ganowa

Sannu kowa da kowa.

A ɗan lokaci da suka wuce ya rubuta game da yadda muka yi nasarar ƙaddamar da wayar SIP akan STM32F4-Discovery tare da 1 MB ROM da 192 KB RAM) dangane da Akwati. Anan dole ne a ce wannan sigar ta kasance kadan kuma tana haɗa wayoyi biyu kai tsaye ba tare da uwar garken ba kuma tare da watsa murya ta hanya ɗaya kawai. Saboda haka, mun yanke shawarar ƙaddamar da mafi cikakkiyar waya tare da kira ta hanyar uwar garke, watsa murya a cikin sassan biyu, amma a lokaci guda kiyaye cikin mafi ƙarancin girman ƙwaƙwalwar ajiya.


Don wayar, an yanke shawarar zaɓar aikace-aikacen sauki_pjsua a matsayin wani ɓangare na ɗakin karatu na PJSIP. Wannan ƙaramin aikace-aikace ne wanda zai iya yin rajista akan uwar garken, karɓa da amsa kira. Nan da nan zan ba da bayanin yadda ake gudanar da shi akan STM32F7-Discovery.

Yadda ake gudu

  1. Ana saita Akwatin Akwatin
    make confload-platform/pjsip/stm32f7cube
  2. Saita asusun SIP da ake buƙata a cikin conf/mods.config fayil.
    
    include platform.pjsip.cmd.simple_pjsua_imported(
        sip_domain="server", 
        sip_user="username",
        sip_passwd="password")
    

    inda uwar garken uwar garken SIP ne (misali, sip.linphone.org), sunan mai amfani и password - sunan mai amfani da kuma kalmar sirri.

  3. Haɗa Embox azaman ƙungiya yi. Game da firmware na hukumar da muke da shi wiki da kuma cikin labarin.
  4. Gudanar da umarnin "simple_pjsua_imported" a cikin Embox console
    
    00:00:12.870    pjsua_acc.c  ....SIP outbound status for acc 0 is not active
    00:00:12.884    pjsua_acc.c  ....sip:[email protected]: registration success, status=200 (Registration succes
    00:00:12.911    pjsua_acc.c  ....Keep-alive timer started for acc 0, destination:91.121.209.194:5060, interval:15s
    

  5. A ƙarshe, ya rage don saka lasifika ko belun kunne a cikin fitowar sauti, da yin magana cikin ƙananan microphones guda biyu na MEMS kusa da nunin. Muna kira daga Linux ta hanyar aikace-aikacen simple_pjsua, pjsua. To, ko za ku iya amfani da kowane nau'in linphone.

Duk wannan an bayyana a kan mu wiki.

Yaya muka isa can

Don haka, da farko tambaya ta taso game da zabar dandamali na kayan aiki. Tun da ya bayyana sarai cewa STM32F4-Discovery ba zai dace da ƙwaƙwalwar ajiya ba, an zaɓi STM32F7-Discovery. Tana da filasha 1 MB da 256 KB na RAM (+ 64 na musamman fast memory, wanda kuma za mu yi amfani da shi). Har ila yau, ba mai yawa don kira ta hanyar uwar garke ba, amma mun yanke shawarar gwada dacewa.

A bisa ka'ida, an raba aikin zuwa matakai da yawa:

  • Gudun PJSIP akan QEMU. Ya dace don gyara kuskure, ƙari mun riga mun sami goyan baya ga codec AC97 a can.
  • Rikodin murya da sake kunnawa akan QEMU da kan STM32.
  • Canja wurin aikace-aikace sauki_pjsua daga PJSIP. Yana ba ku damar yin rajista akan uwar garken SIP da yin kira.
  • Sanya uwar garken alamar alamar ku kuma gwada shi, sannan gwada na waje kamar sip.linphone.org

Sauti a cikin Embox yana aiki ta hanyar Portaudio, wanda kuma ake amfani dashi a cikin PISIP. Matsalolin farko sun bayyana akan QEMU - WAV ya taka rawa sosai a 44100 Hz, amma a 8000 wani abu a fili ya yi kuskure. Sai ya juya cewa shi ne wani al'amari na saita mita - ta tsohuwa shi ne 44100 a cikin kayan aiki, kuma wannan bai canza a cikin shirye-shirye.

A nan, watakila, yana da daraja bayyana kadan yadda ake kunna sauti a gaba ɗaya. Za'a iya saita katin sautin zuwa wani mai nuni zuwa guntun žwažwalwar ajiya wanda kake son kunnawa ko yin rikodi a mitar da aka kayyade. Bayan maƙerin ya ƙare, ana haifar da katsewa kuma ana ci gaba da aiwatarwa tare da buffer na gaba. Gaskiyar ita ce waɗannan buffers suna buƙatar cikewa a gaba yayin da ake kunna na baya. Za mu ƙara fuskantar wannan matsalar akan STM32F7.

Bayan haka, mun yi hayar uwar garken kuma muka sanya alamar alama a kanta. Tun da ya zama dole a yi kuskure da yawa, amma ba na son yin magana a cikin makirufo da yawa, ya zama dole a sake kunnawa ta atomatik da rikodi. Don yin wannan, mun faci simple_pjsua domin ku iya zame fayiloli maimakon na'urorin sauti. A cikin PJSIP, ana yin hakan a sauƙaƙe, tunda suna da manufar tashar jiragen ruwa, wanda zai iya zama na'ura ko fayil. Kuma waɗannan tashoshin jiragen ruwa ana iya haɗa su cikin sassauƙa da sauran tashoshin jiragen ruwa. Kuna iya ganin lambar a pjsip ɗin mu wuraren ajiya. A sakamakon haka, shirin ya kasance kamar haka. A kan uwar garken alamar alama, na fara asusu guda biyu - na Linux da na Embox. Bayan haka, ana aiwatar da umarnin akan Embox simple_pjsua_shigo, Embox yana yin rajista akan uwar garken, bayan haka muna kiran Embox daga Linux. A lokacin haɗin yanar gizon, muna bincika uwar garken alamar cewa an kafa haɗin, kuma bayan wani lokaci za mu ji sauti daga Linux a cikin Embox, kuma a cikin Linux muna adana fayil ɗin da aka kunna daga Embox.

Bayan ya yi aiki akan QEMU, mun matsa zuwa jigilar kaya zuwa STM32F7-Discovery. Matsala ta farko ita ce ba su shiga cikin 1 MB na ROM ba tare da ingantaccen haɓakar mai tarawa "-Os" don girman hoton ba. Shi ya sa muka hada da "-Os". Bugu da ari, facin ya kashe tallafin C ++, don haka ana buƙatar shi don pjsua kawai, kuma muna amfani da simple_pjsua.

Bayan an sanya shi sauki_pjsua, yanke shawarar cewa yanzu akwai damar kaddamar da shi. Amma da farko ya zama dole don magance rikodin da sake kunna sautin. Tambayar ita ce a ina za a rubuta? Mun zaɓi ƙwaƙwalwar ajiyar waje - SDRAM (128 MB). Kuna iya gwada wannan da kanku:

Yana ƙirƙira WAV sitiriyo tare da mitar 16000 Hz da tsawon daƙiƙa 10:


record -r 16000 -c 2 -d 10000 -m C0000000

Mun rasa:


play -m C0000000

Akwai matsaloli guda biyu a nan. Na farko tare da codec - WM8994 ana amfani da shi, kuma yana da irin wannan abu kamar ramin, kuma akwai 4 daga cikin waɗannan ramummuka. . Sabili da haka, a mitar 16000 Hz, mun sami 8000 Hz, amma don 8000 Hz sake kunnawa kawai bai yi aiki ba. Lokacin da kawai aka zaɓi ramummuka 0 da 2, ya yi aiki kamar yadda ya kamata. Wata matsala ita ce keɓancewar sauti a cikin STM32Cube, wanda fitarwar sauti ke aiki ta hanyar SAI (Serial Audio Interface) tare da shigar da sauti (Ban fahimci cikakkun bayanai ba, amma ya bayyana cewa suna raba agogo gama gari kuma lokacin da Ana fara fitar da sauti, sautin yana manne da shi ko ta yaya). Wato, ba za ku iya gudanar da su daban ba, don haka mun yi waɗannan abubuwan - shigar da sauti da fitarwar sauti koyaushe suna aiki (ciki har da katsewa ana haifar da su). Amma lokacin da ba a kunna komai ba a cikin tsarin, to sai mu zame wani fanko mara komai a cikin fitintun sauti, kuma lokacin da aka fara sake kunnawa, da gaske za mu fara cika shi.

Bugu da ari, mun ci karo da gaskiyar cewa sautin yayin rikodin murya ya yi shuru sosai. Wannan shi ne saboda gaskiyar cewa MEMS microphones akan STM32F7-Discovery ko ta yaya ba sa aiki da kyau a mitoci ƙasa da 16000 Hz. Saboda haka, mun saita 16000 Hz, ko da 8000 Hz ya zo. Don yin wannan, ko da yake, ya zama dole don ƙara jujjuyawar software na mitoci ɗaya zuwa wani.

Bayan haka, dole ne in ƙara girman tulin, wanda ke cikin RAM. Bisa ga lissafin mu, pjsip yana buƙatar kusan 190 KB, kuma muna da kusan 100 KB kawai. Anan dole ne in yi amfani da ƙwaƙwalwar ajiyar waje - SDRAM (kimanin 128 KB).

Bayan duk waɗannan gyare-gyare, na ga fakitin farko tsakanin Linux da Embox, kuma na ji sautin! Amma sautin ya kasance mai muni, ba kwata-kwata kamar na QEMU ba, ba zai yiwu a iya fitar da komai ba. Sai muka yi tunanin me zai iya zama lamarin. Gyaran kurakurai ya nuna cewa Embox kawai ba shi da lokacin cika / sauke buffers audio. Yayin da pjsip ke sarrafa firam ɗaya, katsewa guda 2 sun sami lokacin faruwa game da kammala sarrafa buffer, wanda yayi yawa. Tunani na farko don gudun shine haɓaka mai tarawa, amma an riga an haɗa shi cikin PJSIP. Na biyu shine wurin iyo na hardware, mun yi magana game da shi a ciki labarin. Amma kamar yadda aikin ya nuna, FPU ba ta ba da haɓaka mai girma cikin sauri ba. Mataki na gaba shine ba da fifikon zaren. Embox yana da dabarun tsarawa daban-daban, kuma na haɗa da wanda ke goyan bayan abubuwan fifiko da saita rafukan sauti zuwa mafi fifiko. Wannan ma bai taimaka ba.

Tunani na gaba shine cewa muna aiki tare da ƙwaƙwalwar waje kuma zai yi kyau a matsar da sifofi a can waɗanda ake samun dama ga sau da yawa. Na yi bincike na farko na lokaci da kuma menene sauki_pjsua kasaftawa memory. Ya bayyana cewa a cikin 190 Kb, 90 Kb na farko ana ware su ne don buƙatun cikin gida na PJSIP kuma ba a samun su sau da yawa. Bugu da ari, yayin kira mai shigowa, ana kiran aikin pjsua_call_answer, wanda a ciki ake keɓe masu buffer don aiki tare da firam masu shigowa da masu fita. Har yanzu kusan 100 Kb ne. Sannan munyi haka. Har zuwa lokacin kiran, muna sanya bayanai a cikin ƙwaƙwalwar waje. Da zaran kiran, nan da nan za mu maye gurbin tudun da wani - a cikin RAM. Don haka, an canza duk bayanan "zafi" zuwa ƙwaƙwalwar ajiya mai sauri kuma mafi iya tsinkaya.

A sakamakon haka, duk wannan tare ya ba da damar ƙaddamar da shi sauki_pjsua kuma kira ta uwar garken ku. Sannan ta hanyar wasu sabar kamar sip.linphone.org.

binciken

A sakamakon haka, yana yiwuwa a ƙaddamar da shi sauki_pjsua tare da watsa murya a bangarorin biyu ta uwar garken. Matsalar da aka kashe 128 KB na SDRAM ana iya magance ta ta hanyar amfani da Cortex-M7 mai ɗan ƙaramin ƙarfi (misali, STM32F769NI tare da 512 KB na RAM), amma a lokaci guda, har yanzu ba mu yanke fatan shiga 256 ba. KB 🙂 Za mu yi farin ciki idan wani yana sha'awar, Ko mafi kyau tukuna, gwada shi. Duk kafofin, kamar yadda aka saba, suna cikin mu wuraren ajiya.

source: www.habr.com

Add a comment