SIP foonu lori STM32F7-Awari

Mo ki gbogbo yin.

Ni igba diẹ sẹyin awa kọwe nipa bii a ṣe ṣakoso lati ṣe ifilọlẹ foonu SIP kan lori STM32F4-Awari pẹlu 1 MB ROM ati 192 KB Ramu) da lori Apoti. Nibi o gbọdọ sọ pe ẹya yẹn kere ati sopọ awọn foonu meji taara laisi olupin ati pẹlu gbigbe ohun ni itọsọna kan nikan. Nitorinaa, a pinnu lati ṣe ifilọlẹ foonu pipe diẹ sii pẹlu ipe nipasẹ olupin, gbigbe ohun ni awọn itọnisọna mejeeji, ṣugbọn ni akoko kanna tọju laarin iwọn iranti ti o kere julọ ti ṣee ṣe.


Fun foonu, o ti pinnu lati yan ohun elo kan rọrun_pjsua gẹgẹ bi ara ti PJSIP ìkàwé. Eyi jẹ ohun elo to kere julọ ti o le forukọsilẹ lori olupin, gba ati dahun awọn ipe. Ni isalẹ Emi yoo lẹsẹkẹsẹ fun apejuwe kan ti bi o lati ṣiṣe o lori STM32F7-Awari.

Bawo ni lati ṣiṣe

  1. Apoti atunto
    make confload-platform/pjsip/stm32f7cube
  2. Ṣeto iroyin SIP ti o nilo ninu faili conf/mods.config.
    
    include platform.pjsip.cmd.simple_pjsua_imported(
        sip_domain="server", 
        sip_user="username",
        sip_passwd="password")
    

    nibi ti server jẹ olupin SIP (fun apẹẹrẹ, sip.linphone.org), olumulo и ọrọigbaniwọle - orukọ olumulo iroyin ati ọrọigbaniwọle.

  3. Nto Embox bi ẹgbẹ kan ṣe. Nipa famuwia ọkọ ti a ni lori wiki ati ni article.
  4. Ṣiṣe aṣẹ “simple_pjsua_imported” ni console Embox
    
    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. Nikẹhin, o wa lati fi awọn agbohunsoke tabi awọn agbekọri sinu iṣelọpọ ohun, ati sọrọ si awọn microphones MEMS kekere meji lẹgbẹẹ ifihan. A pe lati Linux nipasẹ ohun elo simple_pjsua, pjsua. O dara, tabi o le lo eyikeyi iru linphone miiran.

Gbogbo eyi ni a ṣe apejuwe lori wa wiki.

Bawo ni a ṣe de ibẹ

Nitorinaa, lakoko ibeere naa dide nipa yiyan pẹpẹ ohun elo kan. Niwon o je ko o pe STM32F4-Awari yoo ko bamu lati iranti, STM32F7-Awari ti yan. O ni kọnputa filasi 1 MB ati 256 KB ti Ramu (+ 64 iranti iyara pataki, eyiti a yoo tun lo). Paapaa kii ṣe pupọ fun awọn ipe nipasẹ olupin, ṣugbọn a pinnu lati gbiyanju lati baamu.

Ni ipo fun ara wọn, iṣẹ naa ti pin si awọn ipele pupọ:

  • Nṣiṣẹ PJSIP lori QEMU. O rọrun fun n ṣatunṣe aṣiṣe, pẹlu a ti ni atilẹyin tẹlẹ fun kodẹki AC97 nibẹ.
  • Gbigbasilẹ ohun ati ṣiṣiṣẹsẹhin lori QEMU ati lori STM32.
  • Gbigbe ohun elo rọrun_pjsua lati PJSIP. O faye gba o lati forukọsilẹ lori olupin SIP ati ṣe awọn ipe.
  • Ran olupin ti o da lori Aami akiyesi ati idanwo lori rẹ, lẹhinna gbiyanju awọn ita bii sip.linphone.org

Ohun ni Embox ṣiṣẹ nipasẹ Portaudio, eyiti o tun lo ni PISIP. Awọn iṣoro akọkọ han lori QEMU - WAV dun daradara ni 44100 Hz, ṣugbọn ni 8000 ohunkan ti ko tọ. O wa jade pe o jẹ ọrọ ti ṣeto igbohunsafẹfẹ - nipasẹ aiyipada o jẹ 44100 ninu ohun elo, ati pe eyi ko yipada ni eto.

Nibi, boya, o tọ lati ṣalaye diẹ bi o ṣe dun ohun naa ni gbogbogbo. Kaadi ohun le šeto si itọka si apakan iranti lati eyiti o fẹ mu ṣiṣẹ tabi ṣe igbasilẹ ni ipo igbohunsafẹfẹ ti a ti pinnu tẹlẹ. Lẹhin ti ifipamọ ba pari, idalọwọduro kan ti ipilẹṣẹ ati pe ipaniyan tẹsiwaju pẹlu ifipamọ atẹle. Otitọ ni pe awọn buffer wọnyi nilo lati kun ni ilosiwaju lakoko ti iṣaaju ti n ṣiṣẹ. A yoo koju iṣoro yii siwaju lori STM32F7.

Lẹ́yìn náà, a yá apèsè kan, a sì gbé Aami akiyesi sí orí rẹ̀. Niwọn bi o ti jẹ dandan lati ṣatunṣe pupọ, ṣugbọn Emi ko fẹ lati sọrọ sinu gbohungbohun pupọ, o jẹ dandan lati ṣe ṣiṣiṣẹsẹhin laifọwọyi ati gbigbasilẹ. Lati ṣe eyi, a pample simple_pjsua ki o le yo awọn faili dipo awọn ohun elo. Ni PJSIP, eyi ni a ṣe ni irọrun, nitori wọn ni ero ti ibudo kan, eyiti o le jẹ boya ẹrọ tabi faili kan. Ati awọn ebute oko oju omi wọnyi le ni irọrun sopọ si awọn ebute oko oju omi miiran. O le wo koodu naa ni pjsip wa awọn ibi ipamọ. Bi abajade, eto naa jẹ bi atẹle. Lori olupin Aami akiyesi, Mo bẹrẹ awọn akọọlẹ meji - fun Lainos ati fun Embox. Nigbamii ti, aṣẹ naa wa ni ṣiṣe lori Embox simple_pjsua_imported, Embox ti wa ni aami lori olupin, lẹhin eyi a pe Embox lati Lainos. Ni akoko asopọ, a ṣayẹwo lori olupin Aami akiyesi pe asopọ naa ti fi idi mulẹ, ati lẹhin igba diẹ a yẹ ki o gbọ ohun lati Linux ni Embox, ati ni Lainos a fipamọ faili ti o dun lati Embox.

Lẹhin ti o sise lori QEMU, a gbe lori si porting to STM32F7-Awari. Iṣoro akọkọ ni pe wọn ko baamu si 1 MB ti ROM laisi iṣapeye iṣapejọ ti o ṣiṣẹ “-Os” fun iwọn aworan naa. Ti o ni idi ti a fi pẹlu "-Os". Siwaju sii, alemo alaabo atilẹyin C ++, nitorinaa o nilo fun pjsua nikan, ati pe a lo simple_pjsua.

Lẹhin ti a gbe rọrun_pjsua, pinnu pe bayi o wa ni anfani lati ṣe ifilọlẹ. Ṣugbọn akọkọ o jẹ dandan lati ṣe pẹlu gbigbasilẹ ati ṣiṣiṣẹsẹhin ohun naa. Ibeere naa ni ibo ni lati kọ? A yan ita iranti - SDRAM (128 MB). O le gbiyanju eyi funrararẹ:

Ṣẹda WAV sitẹrio pẹlu igbohunsafẹfẹ ti 16000 Hz ati iye akoko iṣẹju-aaya 10:


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

A padanu:


play -m C0000000

Awọn iṣoro meji wa nibi. Ni igba akọkọ ti pẹlu kodẹki - WM8994 ti lo, ati pe o ni iru ohun kan bi iho, ati pe o wa ninu awọn iho 4. Nitorina, nipasẹ aiyipada, ti eyi ko ba tunto, lẹhinna nigbati o ba n ṣiṣẹ ohun, šišẹsẹhin waye ni gbogbo awọn iho mẹrin mẹrin. . Nitorinaa, ni igbohunsafẹfẹ ti 16000 Hz, a gba 8000 Hz, ṣugbọn fun 8000 Hz, ṣiṣiṣẹsẹhin lasan ko ṣiṣẹ. Nigbati awọn iho 0 ati 2 nikan ni a yan, o ṣiṣẹ bi o ti yẹ. Iṣoro miiran ni wiwo ohun ni STM32Cube, ninu eyiti iṣelọpọ ohun n ṣiṣẹ nipasẹ SAI (Serial Audio Interface) ni iṣọkan pẹlu titẹ ohun (Emi ko loye awọn alaye naa, ṣugbọn o han pe wọn pin aago ti o wọpọ ati nigbati Ijade ohun ti wa ni ipilẹṣẹ, ohun ti wa ni bakan so mọ ẹnu-ọna rẹ). Iyẹn ni, o ko le ṣiṣe wọn lọtọ, nitorinaa a ṣe atẹle naa - titẹ ohun ati iṣelọpọ ohun nigbagbogbo n ṣiṣẹ (pẹlu awọn idilọwọ ti ipilẹṣẹ). Ṣugbọn nigbati ohunkohun ko ba dun ninu eto naa, lẹhinna a rọra yọ ifipamọ ṣofo sinu iṣelọpọ ohun, ati nigbati ṣiṣiṣẹsẹhin bẹrẹ, a bẹrẹ ni otitọ lati kun.

Siwaju sii, a pade otitọ pe ohun lakoko gbigbasilẹ ohun jẹ idakẹjẹ pupọ. Eyi jẹ nitori otitọ pe awọn microphones MEMS lori STM32F7-Awari bakan ko ṣiṣẹ daradara ni awọn igbohunsafẹfẹ ni isalẹ 16000 Hz. Nitorinaa, a ṣeto 16000 Hz, paapaa ti 8000 Hz ba wa. Lati ṣe eyi, botilẹjẹpe, o jẹ dandan lati ṣafikun iyipada sọfitiwia ti igbohunsafẹfẹ kan si omiiran.

Nigbamii ti, Mo ni lati mu iwọn okiti naa pọ si, eyiti o wa ni Ramu. Gẹgẹbi awọn iṣiro wa, pjsip nilo nipa 190 KB, ati pe a ni nkan bii 100 KB ti o ku. Nibi ti mo ni lati lo diẹ ninu awọn ita iranti - SDRAM (nipa 128 KB).

Lẹhin gbogbo awọn atunṣe wọnyi, Mo rii awọn idii akọkọ laarin Lainos ati Embox, ati pe Mo gbọ ohun naa! Ṣugbọn ohun naa jẹ ẹru, kii ṣe bakanna bi lori QEMU, ko ṣee ṣe lati ṣe ohunkohun. Lẹhinna a ronu nipa kini o le jẹ ọran naa. N ṣatunṣe aṣiṣe fihan pe Embox nìkan ko ni akoko lati kun / gbejade awọn buffers ohun. Lakoko ti pjsip n ṣiṣẹ fireemu kan, awọn idilọwọ 2 ni akoko lati waye nipa ipari sisẹ ifipamọ, eyiti o pọ ju. Ero akọkọ fun iyara jẹ iṣapeye akopọ, ṣugbọn o ti wa tẹlẹ ninu PJSIP. Awọn keji ni a hardware lilefoofo ojuami, a ti sọrọ nipa o ni article. Ṣugbọn gẹgẹ bi iṣe ti fihan, FPU ko fun ilosoke pataki ni iyara. Igbesẹ ti o tẹle ni lati ṣe pataki awọn okun. Embox ni awọn ilana ṣiṣe eto oriṣiriṣi, ati pe Mo ti ṣafikun ọkan ti o ṣe atilẹyin awọn pataki ati ṣeto awọn ṣiṣan ohun si ipo ti o ga julọ. Eyi ko ran boya.

Ero ti o tẹle ni pe a n ṣiṣẹ pẹlu iranti ita ati pe yoo dara lati gbe awọn ẹya sibẹ ti o wọle si ni igbagbogbo. Mo ti ṣe kan alakoko onínọmbà ti nigbati ati labẹ ohun ti rọrun_pjsua allocates iranti. O wa jade pe ninu 190 Kb, 90 Kb akọkọ jẹ ipin fun awọn iwulo inu ti PJSIP ati pe wọn ko wọle nigbagbogbo. Siwaju sii, lakoko ipe ti nwọle, iṣẹ pjsua_call_answer ni a pe, ninu eyiti a ti pin awọn buffers fun ṣiṣẹ pẹlu awọn fireemu ti nwọle ati ti njade. O tun jẹ nipa 100 Kb. Ati lẹhinna a ṣe atẹle naa. Titi di akoko ipe, a gbe data sinu iranti ita. Ni kete ti ipe naa, a rọpo okiti lẹsẹkẹsẹ pẹlu ọkan miiran - ni Ramu. Nitorinaa, gbogbo data “gbona” ti gbe lọ si iyara ati iranti asọtẹlẹ diẹ sii.

Bi abajade, gbogbo eyi papọ jẹ ki o ṣee ṣe lati ṣe ifilọlẹ rọrun_pjsua ati pe nipasẹ olupin rẹ. Ati lẹhinna nipasẹ awọn olupin miiran bii sip.linphone.org.

awari

Bi abajade, o ṣee ṣe lati ṣe ifilọlẹ rọrun_pjsua pẹlu gbigbe ohun ni awọn itọnisọna mejeeji nipasẹ olupin naa. Iṣoro naa pẹlu lilo 128 KB ti SDRAM ni a le yanju nipasẹ lilo Cortex-M7 ti o lagbara diẹ sii (fun apẹẹrẹ, STM32F769NI pẹlu 512 KB ti Ramu), ṣugbọn ni akoko kanna, a tun ko fi ireti silẹ lati wọle si 256. KB 🙂 A yoo dun ti o ba ti ẹnikan nife, Tabi dara sibẹsibẹ, gbiyanju o. Gbogbo awọn orisun, bi igbagbogbo, wa ninu wa awọn ibi ipamọ.

orisun: www.habr.com

Fi ọrọìwòye kun