Fòn SIP air STM32F7-Discovery

Halo a h-uile duine.

Beagan air ais tha sinn sgrìobh mu mar a chaidh againn air fòn SIP a chuir air bhog air STM32F4-Discovery le 1 MB ROM agus 192 KB RAM) stèidhichte air Bogsa a-steach. An seo feumar a ràdh gu robh an dreach sin glè bheag agus cheangail e dà fhòn gu dìreach às aonais frithealaiche agus le tar-chuir guth ann an aon taobh a-mhàin. Mar sin, chuir sinn romhainn fòn nas coileanta a chuir air bhog le fios tron ​​​​t-seirbheisiche, tar-chuir guth anns gach taobh, ach aig an aon àm cumail taobh a-staigh na meud cuimhne as lugha.


Airson am fòn, chaidh co-dhùnadh tagradh a thaghadh sìmplidh_pjsua mar phàirt de leabharlann PJSIP. Is e glè bheag de thagradh a tha seo as urrainn clàradh air an fhrithealaiche, gairmean fhaighinn agus a fhreagairt. Gu h-ìosal bheir mi cunntas sa bhad air mar a ruitheas tu e air STM32F7-Discovery.

Ciamar a ruith

  1. A’ rèiteachadh Embox
    make confload-platform/pjsip/stm32f7cube
  2. Suidhich an cunntas SIP a tha a dhìth anns an fhaidhle conf/mods.config.
    
    include platform.pjsip.cmd.simple_pjsua_imported(
        sip_domain="server", 
        sip_user="username",
        sip_passwd="password")
    

    far a bheil frithealaiche na fhrithealaiche SIP (mar eisimpleir, sip.linphone.org), ainm-cleachdaidh и facal-faire - ainm-cleachdaidh cunntais agus facal-faire.

  3. A’ cruinneachadh Embox mar sgioba a dhèanamh. Mu dheidhinn firmware a 'bhùird a tha againn wiki agus a-staigh artaigil.
  4. Ruith an àithne “simple_pjsua_imported” ann an consol 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. Mu dheireadh, tha e fhathast gus luchd-labhairt no fònaichean-cluaise a chuir a-steach don toradh claisneachd, agus bruidhinn ann an dà mhicrofòn beag MEMS ri taobh an taisbeanaidh. Bidh sinn a’ gairm bho Linux tron ​​tagradh simple_pjsua, pjsua. Uill, no faodaidh tu seòrsa sam bith eile de linphone a chleachdadh.

Tha seo uile air a mhìneachadh air ar wiki.

Ciamar a fhuair sinn ann

Mar sin, an toiseach dh ’èirich a’ cheist mu bhith a ’taghadh àrd-ùrlar bathar-cruaidh. Leis gu robh e soilleir nach biodh STM32F4-Discovery a’ freagairt bhon chuimhne, chaidh STM32F7-Discovery a thaghadh. Tha draibhear flash 1 MB aice agus 256 KB de RAM (+ 64 cuimhne luath sònraichte, a chleachdas sinn cuideachd). Cuideachd chan eil mòran airson fiosan tron ​​​​fhrithealaiche, ach chuir sinn romhainn feuchainn ri faighinn a-steach.

Ann an suidheachadh dhaibh fhèin, chaidh an obair a roinn ann an grunn ìrean:

  • A’ ruith PJSIP air QEMU. Bha e goireasach airson debugging, agus bha taic againn mu thràth airson codec AC97 an sin.
  • Clàradh guth agus ath-chluich air QEMU agus air STM32.
  • A 'toirt seachad tagradh sìmplidh_pjsua bho PJSIP. Leigidh e leat clàradh air an fhrithealaiche SIP agus gairmean a dhèanamh.
  • Cleachd an t-seirbheisiche agad fhèin a tha stèidhichte air Asterisk agus dèan deuchainn air, agus an uairsin feuch feadhainn bhon taobh a-muigh leithid sip.linphone.org

Bidh Sound in Embox ag obair tro Portaudio, a tha cuideachd air a chleachdadh ann am PISIP. Nochd a 'chiad dhuilgheadasan air QEMU - chluich WAV gu math aig 44100 Hz, ach aig 8000 chaidh rudeigin ceàrr gu soilleir. Thionndaidh e a-mach gur e cùis a bh ’ann a bhith a’ suidheachadh tricead - gu bunaiteach b ’e 44100 a bh’ anns an uidheamachd, agus cha do dh ’atharraich seo gu prògram.

An seo, is dòcha, is fhiach mìneachadh beagan mar a tha am fuaim air a chluich san fharsaingeachd. Faodar a’ chairt-fuaim a chuir gu comharradh air choreigin air pìos cuimhne às a bheil thu airson a chluich no a chlàradh aig tricead ro-shuidhichte. Às deidh don bhufair crìochnachadh, thèid stad a chuir air adhart agus leanaidh an coileanadh leis an ath bufair. Is e an fhìrinn gum feumar na bufairean sin a lìonadh ro-làimh fhad 's a thathar a' cluich an tè roimhe. Bheir sinn aghaidh air an duilgheadas seo nas fhaide air adhart air STM32F7.

An uairsin, fhuair sinn frithealaiche air màl agus chuir sinn Asterisk air. Leis gu robh feum air mòran dì-bhugachadh, ach cha robh mi airson mòran bruidhinn ris a’ mhicreofon, bha e riatanach ath-chluich agus clàradh fèin-ghluasadach a dhèanamh. Gus seo a dhèanamh, ghlèidh sinn simple_pjsua gus an urrainn dhut faidhlichean a shleamhnadh an àite innealan claisneachd. Ann am PJSIP, tha seo air a dhèanamh gu sìmplidh, leis gu bheil bun-bheachd port aca, a dh’ fhaodadh a bhith na inneal no faidhle. Agus faodaidh na puirt sin a bhith ceangailte gu sùbailte ri puirt eile. Chì thu an còd nar pjsip tasgaidh. Mar thoradh air an sin, bha an sgeama mar a leanas. Air an fhrithealaiche Asterisk, thòisich mi dà chunntas - airson Linux agus airson Embox. An ath rud, thèid an àithne a chuir gu bàs air Embox sìmplidh_pjsua_in-mhalairt, Bidh Embox a’ clàradh air an fhrithealaiche, às deidh sin bidh sinn a’ gairm Embox bho Linux. Aig àm a’ cheangail, nì sinn sgrùdadh air an t-seirbheisiche Asterisk gu bheil an ceangal air a stèidheachadh, agus an ceann greis bu chòir dhuinn fuaim a chluinntinn bho Linux ann an Embox, agus ann an Linux bidh sinn a’ sàbhaladh am faidhle a thèid a chluich bho Embox.

Às deidh dha obrachadh air QEMU, ghluais sinn air adhart gu bhith a’ giùlan gu STM32F7-Discovery. Is e a’ chiad dhuilgheadas nach do ghabh iad a-steach do 1 MB de ROM às aonais an optimization compiler comasach “-Os” airson meud na h-ìomhaigh. Sin as coireach gun tug sinn a-steach "-Os". Nas fhaide, tha am paiste ciorramach taic airson C ++, agus mar sin chan eil feum air ach airson pjsua, agus bidh sinn a’ cleachdadh simple_pjsua.

An dèidh a bhith air a shuidheachadh sìmplidh_pjsua, cho-dhùin gu bheil cothrom ann a-nis a chuir air bhog. Ach an toiseach bha e riatanach dèiligeadh ri clàradh agus ath-chluich an guth. Is e a’ cheist càite an sgrìobh thu? Thagh sinn cuimhne taobh a-muigh - SDRAM (128 MB). Faodaidh tu seo fheuchainn leat fhèin:

Cruthaich stereo WAV le tricead 16000 Hz agus fad 10 diogan:


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

Tha sinn a 'call:


play -m C0000000

Tha dà dhuilgheadas an seo. Tha a 'chiad fhear leis a' chòd - WM8994 air a chleachdadh, agus tha leithid de rud aige ri slot, agus tha 4 de na slotan sin ann. . Mar sin, aig tricead 16000 Hz, fhuair sinn 8000 Hz, ach airson 8000 Hz, cha do dh'obraich ath-chluich. Nuair nach deach ach sliotan 0 agus 2 a thaghadh, dh’ obraich e mar bu chòir. B’ e duilgheadas eile an eadar-aghaidh claisneachd anns an STM32Cube, anns a bheil an toradh claisneachd ag obair tro SAI (Sreath Audio Interface) gu co-shìnte ris an cuir a-steach claisneachd (cha do thuig mi am mion-fhiosrachadh, ach tha e a’ tionndadh a-mach gu bheil iad a ’roinn gleoc cumanta agus cuin tha toradh claisneachd air a thòiseachadh, tha claisneachd ann an dòigh air choreigin ceangailte ris an t-slighe a-steach). Is e sin, chan urrainn dhut an ruith air leth, agus mar sin rinn sinn na leanas - bidh an cuir a-steach claisneachd agus toradh claisneachd an-còmhnaidh ag obair (a ’toirt a-steach brisidhean air an gineadh). Ach nuair nach eil dad ga chluich san t-siostam, bidh sinn dìreach a’ sleamhnachadh bufair falamh a-steach don toradh claisneachd, agus nuair a thòisicheas ath-chluich, bidh sinn gu h-onarach a’ tòiseachadh ga lìonadh.

A bharrachd air an sin, thachair sinn gu robh am fuaim aig àm clàradh guth gu math sàmhach. Tha seo air sgàth 's nach eil microfònan MEMS air an STM32F7-Discovery dòigh air choireigin ag obair gu math aig triceadan fo 16000 Hz. Mar sin, shuidhich sinn 16000 Hz, eadhon ged a thig 8000 Hz. Gus seo a dhèanamh, ge-tà, bha e riatanach tionndadh bathar-bog de aon tricead a chur ri fear eile.

An ath rud, bha agam ri meud a’ chruaich àrdachadh, a tha suidhichte ann an RAM. A rèir ar àireamhachadh, bha feum air pjsip mu 190 KB, agus chan eil againn ach mu 100 KB air fhàgail. An seo bha agam ri beagan cuimhne bhon taobh a-muigh a chleachdadh - SDRAM (timcheall air 128 KB).

Às deidh na deasachaidhean sin uile, chunnaic mi na ciad phasganan eadar Linux agus Embox, agus chuala mi am fuaim! Ach bha am fuaim uamhasach, chan ann idir mar a bha e air QEMU, cha robh e comasach dad a dhèanamh a-mach. An uairsin smaoinich sinn air dè a dh'fhaodadh a bhith ann. Sheall debugging nach eil ùine aig Embox ach bufairean claisneachd a lìonadh / luchdachadh. Fhad ‘s a bha pjsip a’ giullachd aon fhrèam, bha ùine aig briseadh 2 tachairt mu bhith a’ crìochnachadh giollachd bufair, rud a tha cus. B ’e a’ chiad smaoineachadh airson astar optimization cruinneachaidh, ach bha e mu thràth air a ghabhail a-steach ann am PJSIP. Is e an dàrna fear àite fleòdraidh bathar-cruaidh, bhruidhinn sinn mu dheidhinn artaigil. Ach mar a tha cleachdadh air sealltainn, cha tug FPU àrdachadh mòr air astar. B’ e an ath cheum prìomhachas a thoirt do snàithleanan. Tha ro-innleachdan clàraidh eadar-dhealaichte aig Embox, agus tha mi air fear a thoirt a-steach a bheir taic do phrìomhachasan agus a shuidhich sruthan claisneachd chun phrìomhachas as àirde. Cha do chuidich seo idir.

B’ e an ath bheachd gu bheil sinn ag obair le cuimhne bhon taobh a-muigh agus bhiodh e math structaran a ghluasad an sin a gheibhear gu math tric. Rinn mi sgrùdadh tòiseachaidh air cuin agus fo dè sìmplidh_pjsua a’ riarachadh cuimhne. Thionndaidh e a-mach, a-mach à 190 Kb, gu bheil a ’chiad 90 Kb air an riarachadh airson feumalachdan taobh a-staigh PJSIP agus chan fhaighear iad gu tric. A bharrachd air an sin, rè gairm a tha a’ tighinn a-steach, canar ris a’ ghnìomh pjsua_call_answer, anns a bheil bufairean an uairsin air an riarachadh airson obrachadh le frèaman a-steach is a-mach. Bha e fhathast mu 100 Kb. Agus an uairsin rinn sinn na leanas. Gu ruige àm a’ ghairm, bidh sinn a’ cur an dàta ann an cuimhne bhon taobh a-muigh. Cho luath ‘s a thèid an gairm, cuiridh sinn fear eile an àite a’ charn sa bhad - ann an RAM. Mar sin, chaidh a h-uile dàta “teth” a ghluasad gu cuimhne nas luaithe agus nas ro-innse.

Mar thoradh air an sin, bha seo uile còmhla ga dhèanamh comasach a chuir air bhog sìmplidh_pjsua agus cuir fios chun t-seirbheisiche agad. Agus an uairsin tro luchd-frithealaidh eile leithid sip.linphone.org.

toraidhean

Mar thoradh air an sin, bha e comasach a chuir air bhog sìmplidh_pjsua le tar-chuir guth an dà thaobh tron ​​​​t-seirbheisiche. Faodar an duilgheadas le 128 KB de SDRAM a chosg a bharrachd fhuasgladh le bhith a’ cleachdadh Cortex-M7 beagan nas cumhachdaiche (mar eisimpleir, STM32F769NI le 512 KB de RAM), ach aig an aon àm, chan eil sinn fhathast air dòchas a leigeil seachad faighinn a-steach do 256 KB 🙂 Bidh sinn toilichte ma tha ùidh aig cuideigin, No nas fheàrr fhathast, feuch e. Tha a h-uile stòr, mar as àbhaist, nar tasgaidh.

Source: www.habr.com

Cuir beachd ann