SIP foni pa STM32F7-Discovery

Moni nonse.

Kanthawi kapitako ife analemba za momwe tidakwanitsira kukhazikitsa foni ya SIP pa STM32F4-Discovery yokhala ndi 1 MB ROM ndi 192 KB RAM) kutengera Emboks. Apa ziyenera kunenedwa kuti mtunduwo unali wocheperako ndipo umalumikiza mafoni awiri molunjika popanda seva komanso kufalitsa mawu mbali imodzi yokha. Chifukwa chake, tidaganiza zoyambitsa foni yathunthu ndikuyimba kudzera pa seva, kutumiza mawu mbali zonse ziwiri, koma nthawi yomweyo sungani kukula kwa kukumbukira kochepa kwambiri.


Kwa foni, adaganiza zosankha pulogalamu simple_pjsua monga gawo la laibulale ya PJSIP. Iyi ndi ntchito yochepa yomwe ingalembetse pa seva, kulandira ndi kuyankha mafoni. Pansipa ndikufotokozerani momwe mungayendetsere pa STM32F7-Discovery.

Momwe mungathamangire

  1. Kukonza Embox
    make confload-platform/pjsip/stm32f7cube
  2. Khazikitsani akaunti ya SIP yofunikira mu fayilo ya conf/mods.config.
    
    include platform.pjsip.cmd.simple_pjsua_imported(
        sip_domain="server", 
        sip_user="username",
        sip_passwd="password")
    

    kumene seva ndi seva ya SIP (mwachitsanzo, sip.linphone.org), lolowera ΠΈ achinsinsi - dzina lolowera muakaunti ndi mawu achinsinsi.

  3. Kusonkhanitsa Embox ngati gulu kupanga. Za board firmware yomwe tili nayo wiki ndi nkhani.
  4. Thamangani lamulo la "simple_pjsua_imported" mu 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. Pomaliza, imatsalira kuyika okamba kapena mahedifoni muzotulutsa zomvera, ndikulankhula mu maikolofoni ang'onoang'ono a MEMS pafupi ndi chiwonetserocho. Timayimba kuchokera ku Linux kudzera mu pulogalamu ya simple_pjsua, pjsua. Chabwino, kapena mungagwiritse ntchito mtundu wina uliwonse wa linphone.

Zonsezi zikufotokozedwa m'nkhani yathu wiki.

Tinafika bwanji kumeneko

Chifukwa chake, poyamba funso lidabuka posankha nsanja ya Hardware. Popeza zinali zoonekeratu kuti STM32F4-Discovery sichingagwirizane ndi kukumbukira, STM32F7-Discovery inasankhidwa. Ali ndi 1 MB kung'anima pagalimoto ndi 256 KB wa RAM (+ 64 wapadera kukumbukira mofulumira, amene ifenso ntchito). Komanso osati ma foni ambiri kudzera pa seva, koma tinaganiza zoyesera kuti tigwirizane.

Malinga ndi iwo okha, ntchitoyi idagawidwa m'magawo angapo:

  • Kuthamanga PJSIP pa QEMU. Zinali zosavuta kukonza zolakwika, kuphatikiza tinali ndi chithandizo cha AC97 codec pamenepo.
  • Kujambula mawu ndi kusewera pa QEMU ndi pa STM32.
  • Kutumiza pulogalamu simple_pjsua kuchokera ku PJSIP. Zimakulolani kuti mulembetse pa seva ya SIP ndikuyimba mafoni.
  • Ikani seva yanu yochokera ku Asterisk ndikuyesapo, ndiye yesani zakunja monga sip.linphone.org

Phokoso mu Embox limagwira ntchito kudzera pa Portaudio, yomwe imagwiritsidwanso ntchito ku PISIP. Mavuto oyamba adawonekera pa QEMU - WAV idasewera bwino pa 44100 Hz, koma pa 8000 china chake chalakwika. Zinapezeka kuti inali nkhani yokhazikitsa pafupipafupi - mwachisawawa inali 44100 mu zipangizo, ndipo izi sizinasinthe mwadongosolo.

Apa, mwinamwake, ndi bwino kufotokoza pang'ono momwe phokoso limaseweredwa kawirikawiri. Khadi lamawu litha kukhazikitsidwa ku cholozera ku kukumbukira komwe mukufuna kusewera kapena kujambula pafupipafupi. Buffer ikatha, kusokoneza kumapangidwa ndipo kupha kumapitilira ndi buffer yotsatira. Chowonadi ndi chakuti ma buffer awa amafunika kudzazidwa pasadakhale pomwe yapitayi ikuseweredwa. Tidzakumananso ndi vutoli pa STM32F7.

Kenako, tidabwereka seva ndikuyika Asterisk pamenepo. Popeza kunali kofunikira kukonza zolakwika zambiri, koma sindinkafuna kuyankhula kwambiri ndi maikolofoni, kunali koyenera kupanga kusewera ndi kujambula. Kuti tichite izi, tidayika simple_pjsua kuti mutha kutsitsa mafayilo m'malo mwa zida zomvera. Mu PJSIP, izi zimachitika mosavuta, popeza ali ndi lingaliro la doko, lomwe lingakhale chipangizo kapena fayilo. Ndipo madoko awa amatha kulumikizidwa mosavuta ndi madoko ena. Mutha kuwona code mu pjsip yathu nkhokwe. Zotsatira zake, ndondomekoyi inali motere. Pa seva ya Asterisk, ndinayambitsa akaunti ziwiri - za Linux ndi Embox. Chotsatira, lamuloli likuchitidwa pa Embox simple_pjsua_imported, Embox imalembetsedwa pa seva, pambuyo pake timatcha Embox kuchokera ku Linux. Panthawi yolumikizana, timayang'ana pa seva ya Asterisk kuti kugwirizana kwakhazikitsidwa, ndipo patapita kanthawi tiyenera kumva phokoso kuchokera ku Linux mu Embox, ndipo mu Linux timasunga fayilo yomwe imasewera kuchokera ku Embox.

Itatha kugwira ntchito pa QEMU, tinasamukira ku STM32F7-Discovery. Vuto loyamba ndilakuti sanagwirizane ndi 1 MB ya ROM popanda kukhathamiritsa kwa compiler "-Os" kukula kwa chithunzicho. Ndicho chifukwa chake tinaphatikizapo "-Os". Kupitilira apo, chigambacho chidayimitsa chithandizo cha C ++, chifukwa chake chimangofunika pjsua, ndipo timagwiritsa ntchito simple_pjsua.

Pambuyo poyikidwa simple_pjsua, adaganiza kuti tsopano pali mwayi woyambitsa. Koma choyamba kunali koyenera kuthana ndi kujambula ndi kusewera kwa mawu. Funso ndiloti tilembe kuti? Tinasankha kukumbukira kunja - SDRAM (128 MB). Mutha kuyesa izi nokha:

Amapanga stereo WAV yokhala ndi ma frequency a 16000 Hz ndi kutalika kwa masekondi 10:


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

Taluza:


play -m C0000000

Pali mavuto awiri apa. Yoyamba yokhala ndi codec - WM8994 imagwiritsidwa ntchito, ndipo ili ndi chinthu ngati kagawo, ndipo pali 4 mwa mipata iyi. . Chifukwa chake, pafupipafupi 16000 Hz, tidalandira 8000 Hz, koma kwa 8000 Hz, kusewera sikunagwire ntchito. Pomwe mipata 0 ndi 2 yokha idasankhidwa, idagwira ntchito momwe iyenera kukhalira. Vuto lina linali mawonekedwe omvera mu STM32Cube, momwe mawu amawu amagwirira ntchito kudzera pa SAI (Serial Audio Interface) molumikizana ndi mawu omvera (sindinamvetsetse tsatanetsatane, koma zidapezeka kuti amagawana wotchi wamba komanso kutulutsa kwamawu kumayambika, zomvera zimalumikizidwa mwanjira yake yolowera). Ndiye kuti, simungathe kuwayendetsa padera, chifukwa chake tidachita izi - kuyika kwamawu ndi kutulutsa mawu nthawi zonse kumagwira ntchito (kuphatikiza zosokoneza zimapangidwa). Koma palibe chomwe chikuseweredwa m'dongosolo, ndiye kuti timangoyika buffer yopanda kanthu muzotulutsa, ndipo kusewera kukayamba, timayamba kudzaza moona mtima.

Kupitilira apo, tidakumana ndi mfundo yoti phokoso panthawi yojambulira mawu linali labata kwambiri. Izi ndichifukwa choti maikolofoni a MEMS pa STM32F7-Discovery mwanjira ina sagwira ntchito bwino pamafuriji ochepera 16000 Hz. Chifukwa chake, timayika 16000 Hz, ngakhale 8000 Hz ibwera. Kuti tichite izi, kunali kofunikira kuwonjezera kutembenuka kwa mapulogalamu a ma frequency amodzi kupita ku ena.

Kenaka, ndinayenera kuonjezera kukula kwa mulu, womwe uli mu RAM. Malinga ndi kuwerengera kwathu, pjsip imafuna pafupifupi 190 KB, ndipo tatsala ndi pafupifupi 100 KB. Apa ndinayenera kugwiritsa ntchito kukumbukira kunja - SDRAM (pafupifupi 128 KB).

Pambuyo pa zosintha zonsezi, ndinawona mapepala oyambirira pakati pa Linux ndi Embox, ndipo ndinamva phokoso! Koma phokosolo linali lowopsya, osati mofanana ndi pa QEMU, zinali zosatheka kupanga chirichonse. Kenako tinaganizira zimene zingakhale vuto. Kuchotsa zolakwika kunawonetsa kuti Embox ilibe nthawi yodzaza / kutsitsa ma buffers. Pomwe pjsip inali kukonza chimango chimodzi, zosokoneza 2 zinali ndi nthawi yoti zichitike pakumalizidwa kwa buffer processing, zomwe ndizochulukirapo. Lingaliro loyamba la liwiro linali kukhathamiritsa kwa compiler, koma linali litaphatikizidwa kale mu PJSIP. Chachiwiri ndi malo oyandama a hardware, tidakambiranapo nkhani. Koma monga momwe zasonyezera, FPU sinapereke kuwonjezeka kwakukulu kwa liwiro. Chotsatira chinali kuika patsogolo ulusi. Embox ili ndi njira zosiyanasiyana zokonzera, ndipo ndaphatikiza imodzi yomwe imathandizira zofunika kwambiri ndikuyika nyimbo zomvera kukhala zofunika kwambiri. Izi sizinathandizenso.

Lingaliro lotsatira linali loti tikugwira ntchito ndi kukumbukira kwakunja ndipo zingakhale bwino kusuntha zomangidwa kumeneko zomwe zimapezeka nthawi zambiri. Ndinachita kusanthula koyambirira kwa liti komanso pansi pa chiyani simple_pjsua amagawa kukumbukira. Zinapezeka kuti kuchokera ku 190 KB, 90 Kb yoyamba imaperekedwa pazosowa zamkati za PJSIP ndipo sizipezeka kawirikawiri. Kupitilira apo, pakuyimba komwe kukubwera, ntchito ya pjsua_call_answer imatchedwa, momwe ma buffers amaperekedwa kuti agwire ntchito ndi mafelemu omwe akubwera ndi otuluka. Inali idakali pafupifupi 100 KB. Ndiyeno tinachita zotsatirazi. Mpaka nthawi yoyimba, timayika deta mu kukumbukira kwakunja. Kungoyimba, nthawi yomweyo timasintha muluwo ndi wina - mu RAM. Choncho, deta yonse "yotentha" inasamutsidwa ku kukumbukira mofulumira komanso kosayembekezereka.

Zotsatira zake, zonsezi palimodzi zidapangitsa kuti zitheke simple_pjsua ndi kuyimba kudzera pa seva yanu. Ndiyeno kupyolera mu maseva ena monga sip.linphone.org.

anapezazo

Chifukwa chake, zinali zotheka kuyambitsa simple_pjsua ndi kutumiza kwa mawu mbali zonse ziwiri kudzera pa seva. Vuto lowonjezera 128 KB la SDRAM litha kuthetsedwa pogwiritsa ntchito Cortex-M7 yamphamvu pang'ono (mwachitsanzo, STM32F769NI yokhala ndi 512 KB ya RAM), koma nthawi yomweyo, sitinataye chiyembekezo cholowa mu 256. KB πŸ™‚ Tidzakhala okondwa ngati wina ali ndi chidwi, Kapena bwino, yesani. Magwero onse, monga mwachizolowezi, ali m'mabuku athu nkhokwe.

Source: www.habr.com

Kuwonjezera ndemanga