Fón SIP ar STM32F7-Fionnachtain

Dia duit gach duine.

Tamall ó shin táimid scríobh faoin gcaoi ar éirigh linn fón SIP a sheoladh ar STM32F4-Discovery le 1 MB ROM agus 192 KB RAM) bunaithe ar Embox. Anseo ní mór a rá go raibh an leagan sin íosta agus cheangail sé dhá fhóin go díreach gan freastalaí agus le tarchur guth i dtreo amháin. Dá bhrí sin, shocraigh muid fón níos iomláine a sheoladh le glao trí fhreastalaí, tarchur guth sa dá threo, ach ag an am céanna luí isteach ar an méid cuimhne is lú is féidir.


Socraíodh feidhmchlár a roghnú don ghuthán simplí_pjsua mar chuid de leabharlann PJSIP. Is feidhmchlár íosta é seo ar féidir clárú ar an bhfreastalaí, glaonna a fháil agus a fhreagairt. Anseo thíos tabharfaidh mé cur síos láithreach ar conas é seo a rith ar an STM32F7-Discovery.

Conas a sheoladh

  1. Embox á chumrú
    make confload-platform/pjsip/stm32f7cube
  2. Sa chomhad conf/mods.config shocraigh muid an cuntas SIP riachtanach.
    
    include platform.pjsip.cmd.simple_pjsua_imported(
        sip_domain="server", 
        sip_user="username",
        sip_passwd="password")
    

    i gcás freastalaí is freastalaí SIP é (mar shampla, sip.linphone.org), ainm úsáideora и Focal faire — ainm úsáideora agus pasfhocal don chuntas.

  3. Cuirimid Embox le chéile le foireann a dhéanamh. Tá eolas againn maidir le firmware boird ag wiki agus Airteagal.
  4. Rith an t-ordú “simple_pjsua_imported” sa chonsól 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. Ar deireadh, níl fágtha ach cainteoirí nó cluasáin a chur isteach san aschur fuaime, agus labhairt i dhá mhicreafón MEMS beag in aice leis an taispeáint. Glaoimid ó Linux ag baint úsáide as an bhfeidhmchlár simple_pjsua, pjsua. Bhuel, nó is féidir leat aon chineál eile de linphone a úsáid.

Déantar cur síos ar seo go léir ar ár wiki.

Conas a fuair muid anseo

Mar sin, ar dtús tháinig an cheist maidir le roghnú ardán crua-earraí. Ós rud é go raibh sé soiléir nach mbeadh an STM32F4-Discovery oiriúnach don chuimhne, roghnaíodh an STM32F7-Discovery. Tá tiomáint flash 1 MB aici agus 256 KB RAM (+ 64 cuimhne tapa speisialta, a úsáidfimid freisin). Níl sé chomh maith do ghlaonna tríd an bhfreastalaí, ach shocraigh muid iarracht a dhéanamh dul isteach.

Go traidisiúnta, roinneadh an tasc i roinnt céimeanna:

  • PJSIP a rith ar QEMU. Bhí sé áisiúil le haghaidh dífhabhtaithe, agus bhí tacaíocht againn cheana féin don chód AC97 ann.
  • Taifeadadh gutha agus athsheinm ar QEMU agus STM32.
  • An t-iarratas a aistriú simplí_pjsua ón PJSIP. Ligeann sé duit clárú ar fhreastalaí SIP agus glaonna a dhéanamh.
  • Imscar do fhreastalaí féin bunaithe ar réiltín agus déan tástáil air, agus ansin bain triail as cinn sheachtracha, mar sip.linphone.org

Oibríonn Sound in Embox trí Portaudio, a úsáidtear freisin i PISIP. Bhí na chéad fhadhbanna le feiceáil ar QEMU - imríodh WAVanna go maith ag 44100 Hz, ach ag 8000 bhí rud éigin ag dul go soiléir mícheart. D'éirigh sé amach go raibh an fhadhb ann maidir leis an minicíocht a shocrú - de réir réamhshocraithe sa trealamh bhí sé 44100, agus níor athraigh muid é seo i mbogearraí.

Anseo, is dócha gur fiú beagán a mhíniú faoi conas a sheintear fuaim i gcoitinne. Is féidir leis an gcárta fuaime pointeoir éigin a shocrú do phíosa cuimhne óna gcaithfear é a sheinm nó a thaifeadadh ar mhinicíocht réamhshocraithe. Tar éis an maolán a bheith imithe i léig, gintear idirbhriseadh agus leantar ar aghaidh lena fhorghníomhú ón gcéad mhaolán eile. Is é an pointe ná go gcaithfear na maoláin seo a líonadh roimh ré agus an ceann roimhe seo á imirt. Tabharfaimid aghaidh ar an bhfadhb seo níos faide ar an STM32F7.

Ansin, fuaireamar freastalaí ar cíos agus chuireamar réiltín air. Ós rud é go raibh go leor dífhabhtaithe le déanamh, agus nach raibh mé ag iarraidh mórán cainte a dhéanamh sa mhicreafón, bhí sé riachtanach athsheinm agus taifeadadh uathoibríoch a dhéanamh. Chun seo a dhéanamh, rinneamar simple_pjsua a bhreacadh ionas go bhféadfaimis comhaid a chur isteach in ionad gléasanna fuaime. I PJSIP déantar é seo go simplí, ós rud é go bhfuil coincheap an chalafoirt acu, ar féidir gur feiste nó comhad é. Agus is féidir na calafoirt seo a nascadh go solúbtha le calafoirt eile. Is féidir leat an cód a fheiceáil inár pjsip stórtha. Mar thoradh air sin, bhí an scéim mar seo a leanas. Chruthaigh mé dhá chuntas ar an bhfreastalaí Asterisk - le haghaidh Linux agus le haghaidh Embox. Ansin, déantar an t-ordú a fhorghníomhú ar Embox simplí_pjsua_iomportáilte, Cláraíonn Embox ar an bhfreastalaí, agus ina dhiaidh sin tugaimid Embox ó Linux. I láthair na huaire ceangail, déanaimid seiceáil ar an bhfreastalaí réiltín go bhfuil an nasc iomlán bunaithe, agus tar éis roinnt ama ba cheart dúinn fuaim a chloisteáil ó Linux in Embox, agus i Linux sábhálann muid an comhad a imrítear ó Embox.

Nuair a d’oibrigh sé seo ar QEMU, bhogamar ar aghaidh chuig é a aistriú chuig an STM32F7-Discovery. Ba í an chéad fhadhb ná nach bhféadfaimis luí isteach i 1 MB de ROM gan an leas iomlán a bhaint as tiomsaitheoir “-Os” le haghaidh méid na híomhá. Mar sin, chuireamar “-Os” san áireamh. Ansin, dhíchumasaigh an paiste tacaíocht do C++, mar sin níl ag teastáil ach le haghaidh pjsua, agus úsáidimid simple_pjsua.

Tar éis cur simplí_pjsua, chinn go raibh deis ann anois é a sheoladh. Ach ar dtús bhí orainn a dhéanamh amach conas guthanna a thaifeadadh agus a imirt ar ais. Ceist - nuair a scríobh? Roghnaigh muid cuimhne sheachtrach - SDRAM (128 MB). Is féidir leat é seo a thriail tú féin:

Cruthóidh sé steirió WAV le minicíocht 16000 Hz agus fad 10 soicind:


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

caillimid:


play -m C0000000

Bhí dhá fhadhb anseo. Tá an chéad cheann leis an gcód - úsáidtear WM8994, agus tá a leithéid de rud aige le sliotán, agus tá 4 sliotán ann ceithre sliotán. Mar sin, ag minicíocht 16000 Hz fuair muid 8000 Hz, ach le haghaidh athsheinm 8000 Hz níor oibrigh go simplí. Nuair a roghnaigh muid ach sliotáin 0 agus 2, d'oibrigh sé mar a bhíothas ag súil leis. Fadhb eile a bhí sa chomhéadan fuaime sa STM32Cube, ina n-oibríonn an t-aschur fuaime trí SAI (Comhéadan Fuaime Srathach) go sioncronach leis an ionchur fuaime (níor thuig mé na sonraí, ach tharla sé go bhfuil clog coitianta á roinnt acu agus nuair a thosaigh siad ag tosú an t-aschur fuaime, tá an fhuaim ceangailte ar bhealach éigin dó). Is é sin, tá sé dodhéanta iad a reáchtáil ar leithligh, agus mar sin rinneamar an méid seo a leanas - oibríonn an t-ionchur fuaime agus an t-aschur fuaime i gcónaí (lena n-áirítear cur isteach a ghintear). Ach nuair nach bhfuil aon rud ag imirt sa chóras, ní dhéanaimid ach maolán folamh a shleamhnú isteach san aschur fuaime, agus nuair a thosaíonn athsheinm, tosaímid go hionraic ag líonadh é.

Ansin tháinig muid ar an bhfíric go raibh an fhuaim nuair a taifeadadh an guth an-chiúin. Tá sé seo mar gheall ar an bhfíric nach n-oibríonn na micreafóin MEMS ar an STM32F7-Discovery ar bhealach éigin go maith ag minicíochtaí faoi bhun 16000 Hz. Dá bhrí sin, leagamar é go 16000 Hz, fiú má thagann 8000 Hz. Chun seo a dhéanamh, áfach, bhí sé riachtanach comhshó bogearraí de mhinicíocht amháin a chur leis go ceann eile.

Ansin, bhí orainn cur leis an méid an gcarn, atá suite i RAM. De réir ár n-áirimh, bhí thart ar 190 KB ag teastáil ó pjsip, agus ní raibh ach thart ar 100 KB fágtha againn. Anseo bhí orainn beagán cuimhne seachtrach a úsáid - SDRAM (thart ar 128 KB).

Tar éis na n-athruithe seo go léir, chonaic mé na chéad pacáistí idir Linux agus Embox, agus chuala mé an fhuaim! Ach bhí an fhuaim uafásach, ní ar chor ar bith cosúil le QEMU, ní raibh aon rud le cloisteáil. Ansin rinneamar machnamh ar cad a d'fhéadfadh a bheith i gceist. Thaispeáin dífhabhtaithe nach bhfuil am ag Embox maoláin fuaime a líonadh/a dhíluchtú. Cé go bhfuil pjsip ag próiseáil fráma amháin, tharla 2 idirbhriseadh faoi chríochnú na próiseála maoláin, rud atá ró-iomarca. Ba é an chéad smaoineamh a bhí agam ar luas suas leas iomlán a bhaint as tiomsaitheoir, ach bhí sé sin san áireamh cheana féin i PJSIP. Is é an dara ceann crua-earraí snámhphointe, labhair muid faoi Airteagal. Ach mar a léirigh cleachtas, níor chuir FPU méadú suntasach ar luas ar fáil. Ba é an chéad chéim eile tosaíochtaí snáithe a shocrú. Tá straitéisí sceidealaithe éagsúla ag Embox, agus chuir mé ar chumas an ceann a thacaíonn le tosaíochtaí agus thug sé an tosaíocht is airde do na sruthanna fuaime. Níor chabhraigh sé seo ach an oiread.

Ba é an chéad smaoineamh eile ná go bhfuilimid ag obair le cuimhne sheachtrach agus bheadh ​​sé go maith struchtúir a bhogadh ann a bhfuil rochtain orthu go han-mhinic. Rinne mé réamhanailís ar cathain agus ar cad faoi simplí_pjsua leithdháileann cuimhne. Tharla sé, as 190 KB, go leithdháiltear na chéad 90 KB do riachtanais inmheánacha PJSIP agus ní dhéantar rochtain orthu go minic. Ansin, le linn glao isteach, tugtar an fheidhm pjsua_call_answer, ina leithdháiltear maoláin ansin le haghaidh oibriú le frámaí isteach agus amach. Bhí sé fós thart ar 100 KB. Agus ansin rinne muid an méid seo a leanas. Go dtí go ndéantar an glao, stóráiltear na sonraí i gcuimhne sheachtrach. Chomh luath agus a thagann an glaoch, cuirimid ceann eile in RAM in ionad an chairn láithreach. Mar sin, aistríodh na sonraí “te” go léir chuig cuimhne níos tapúla agus níos intuartha.

Mar thoradh air sin, thug sé seo go léir le chéile deis dúinn seoladh simplí_pjsua agus glaoch trí do fhreastalaí. Agus ansin trí fhreastalaithe eile ar nós sip.linphone.org.

Torthaí

Sa deireadh bhí sé indéanta a sheoladh simplí_pjsua le tarchur gutha sa dá threo tríd an bhfreastalaí. Is féidir an fhadhb le 128 KB breise de SDRAM a réiteach trí úsáid a bhaint as Cortex-M7 beagán níos cumhachtaí (mar shampla, STM32F769NI le 512 KB RAM), ach níor thug muid suas dóchas feistiú i 256 KB :) Déanfaimid bíodh áthas ort má tá suim ag duine éigin, nó níos fearr fós, bain triail as. Tá gach foinse, mar is gnách, inár stórtha.

Foinse: will.com

Add a comment