SIP foni paSTM32F7-Discovery

Mhoroi munhu wese.

Nguva yadarika isu akanyora nezvekuti takakwanisa sei kuvhura foni yeSIP paSTM32F4-Discovery ine 1 MB ROM uye 192 KB RAM) zvichibva pa Embox. Pano panofanira kutaurwa kuti iyo vhezheni yaive shoma uye yakabatanidza mafoni maviri zvakananga pasina sevha uye nekufambisa kwezwi munzira imwe chete. Naizvozvo, isu takafunga kuvhura imwe yakawedzera runhare nekufona kuburikidza nesevha, kufambisa kwezwi mumativi ese, asi panguva imwechete chengetedza mukati mediki diki ndangariro saizi.


Kune foni, zvakasarudzwa kusarudza application simple_pjsua sechikamu cheraibhurari yePJSIP. Ichi chishoma application chinogona kunyoresa pane server, kugamuchira uye kupindura mafoni. Pazasi ini ndichakurumidza kupa tsananguro yekuti ungaimhanyisa sei paSTM32F7-Discovery.

Kumhanya sei

  1. Kugadzirisa Embox
    make confload-platform/pjsip/stm32f7cube
  2. Seta iyo SIP account inodiwa mu conf/mods.config faira.
    
    include platform.pjsip.cmd.simple_pjsua_imported(
        sip_domain="server", 
        sip_user="username",
        sip_passwd="password")
    

    apo Server iSIP sevha (semuenzaniso, sip.linphone.org), Username ΠΈ pasiwedhi - account username uye password.

  3. Kuunganidza Embox sechikwata kuita. Nezve bhodhi firmware yatinayo wiki and in chinyorwa.
  4. Mhanya iyo "simple_pjsua_imported" murairo muEmbox 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. Chekupedzisira, inosara yekuisa vatauri kana mahedhifoni mune yekubuda kweaudio, uye kutaura mumakrofoni maviri madiki eMEMS padivi pechiratidziro. Isu tinofona kubva kuLinux kuburikidza neiyo application simple_pjsua, pjsua. Zvakanaka, kana iwe unogona kushandisa chero imwe mhando yelinphone.

Zvose izvi zvinotsanangurwa pamusoro pedu wiki.

Takasvika seiko

Saka, pakutanga mubvunzo wakamuka pamusoro pekusarudza chikuva chehardware. Sezvo zvaive pachena kuti STM32F4-Discovery yaisakwana kubva mundangariro, STM32F7-Discovery yakasarudzwa. Ane 1 MB flash drive uye 256 KB ye RAM (+ 64 yakakosha kukurumidza ndangariro, yatichashandisawo). Zvakare kwete akawanda ekufona kuburikidza neserver, asi isu takafunga kuyedza kukwana mukati.

Zvichienderana nezvavo, basa racho rakakamurwa kuita matanho akati wandei:

  • Kumhanya PJSIP paQEMU. Yakanga iri nyore kugadzirisa, uye isu taitova nerutsigiro rweAC97 codec ipapo.
  • Kurekodha inzwi uye kutamba paQEMU uye paSTM32.
  • Kuendesa application simple_pjsua kubva kuPJSIP. Inokubvumira kunyoresa paSIP server uye kufona.
  • Shandisa yako Asterisk-based server uye kuyedza pairi, wobva waedza ekunze akadai sip.linphone.org

Inzwi muEmbox inoshanda kuburikidza nePortaudio, iyo inoshandiswa zvakare muPISIP. Matambudziko ekutanga akaonekwa paQEMU - WAV yakatamba zvakanaka pa44100 Hz, asi pa8000 chimwe chinhu chakashata. Zvakazoitika kuti yaive nyaya yekuisa frequency - nekusarudzika yaive 44100 mumidziyo, uye izvi hazvina kushanduka zvakarongeka.

Pano, zvichida, zvakakodzera kutsanangura zvishomanana kuti inzwi rinoridzwa sei zvachose. Kadhi rekurira rinogona kusetwa kune imwe pointer kune chidimbu chendangariro kubva kwaunoda kutamba kana kurekodha pane yakafanotemerwa frequency. Mushure mekunge buffer yapera, kukanganisa kunogadzirwa uye kuuraya kunoenderera neinotevera buffer. Icho chokwadi ndechekuti mabuffers aya anoda kuzadzwa pachine nguva apo yekutanga iri kuridzwa. Tichatarisana nedambudziko iri zvakare pa STM32F7.

Tevere, takarenda sevha uye takaisa Asterisk pairi. Sezvo zvaive zvakafanira kugadzirisa zvakanyanya, asi ini ndaisada kutaura mumaikorofoni zvakanyanya, zvaive zvakafanira kuita otomatiki kutamba uye kurekodha. Kuti tiite izvi, takabata simple_pjsua kuitira kuti ugone kutsveta mafaera panzvimbo yemaodhiyo emidziyo. MuPJSIP, izvi zvinoitwa zviri nyore, sezvo vaine pfungwa yechiteshi, inogona kunge iri mudziyo kana faira. Uye aya madoko anogona kuchinjika akabatana kune mamwe madoko. Iwe unogona kuona iyo kodhi mune yedu pjsip repositories. Nekuda kweizvozvo, chirongwa chaive seizvi. PaAsterisk server, ndakatanga maakaundi maviri - eLinux uye eEmbox. Tevere, murairo unoitwa paEmbox simple_pjsua_imported, Embox inonyoresa pane sevha, mushure mezvo tinodaidza Embox kubva kuLinux. Panguva yekubatanidza, tinotarisa paAsterisk server kuti kuwirirana kwakasimbiswa, uye mushure mechinguva tinofanira kunzwa inzwi kubva kuLinux muEmbox, uye muLinux tinochengetedza faira inoridzwa kubva kuEmbox.

Mushure mekushanda paQEMU, takaenderera mberi kuenda kune STM32F7-Discovery. Dambudziko rekutanga nderekuti havana kukwana mu1 MB yeROM pasina iyo inogonesa compiler optimization "-Os" yehukuru hwemufananidzo. Ndosaka takabatanidza "-Os". Kupfuurirazve, chigamba chakaremara rutsigiro rweC ++, saka chinodiwa chete pjsua, uye tinoshandisa simple_pjsua.

Mushure mekuiswa simple_pjsua, akasarudza kuti ikozvino pane mukana wekuivhura. Asi kutanga zvaive zvakakodzera kutarisana nekurekodhwa uye kutamba zvakare kwezwi. Mubvunzo ndewekuti ndonyora kupi? Isu takasarudza yekunze ndangariro - SDRAM (128 MB). Unogona kuedza izvi iwe pachako:

Inogadzira stereo WAV ine frequency ye16000 Hz uye nguva yemasekonzi gumi:


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

Tinorasikirwa:


play -m C0000000

Pane matambudziko maviri pano. Yekutanga ine codec - WM8994 inoshandiswa, uye ine chinhu chakadai se slot, uye kune 4 yezvivharo izvi.Saka, nekusarudzika, kana izvi zvisina kugadzirwa, zvino pakuridza odhiyo, kutamba kunoitika mune ese mana slots. . Naizvozvo, pahuwandu hwe16000 Hz, takagamuchira 8000 Hz, asi ye8000 Hz, kutamba hakuna kungoshanda. Pakangosarudzwa mitsetse 0 ne2, yakashanda sezvayaifanira kuita. Rimwe dambudziko raive redhiyo interface muSTM32Cube, umo inobuda odhiyo inoshanda kuburikidza neSAI (Serial Audio Interface) pamwe chete neiyo yekuisa odhiyo (ini handina kunzwisisa izvo, asi zvinoitika kuti vanogovana wachi yakafanana uye kana odhiyo inobuda inotangwa, odhiyo inosungirirwa neimwe nzira pakupinda kwayo). Ndokunge, haugone kuzvimhanyisa zvakaparadzana, saka isu takaita zvinotevera - iyo odhiyo yekuisa uye yekuburitsa odhiyo inogara ichishanda (kusanganisira kukanganisa kunogadzirwa). Asi kana pasina chiri kuridzwa muhurongwa, isu tinongotsveta buffer isina chinhu muodhiyo inobuda, uye kana kutamba kunotanga, tinotanga kuzadza.

Kupfuurirazve, takasangana nenyaya yekuti ruzha panguva yekurekodha izwi raive rakanyarara. Izvi zvinokonzerwa nekuti MEMS maikorofoni paSTM32F7-Discovery neimwe nzira haashande zvakanaka pama frequency ari pasi pe16000 Hz. Naizvozvo, isu tinoseta 16000 Hz, kunyangwe 8000 Hz ikauya. Kuti uite izvi, zvakadaro, zvaive zvakafanira kuwedzera shanduko yesoftware yeimwe frequency kune imwe.

Tevere, ndaifanira kuwedzera saizi yemurwi, iri mu RAM. Zvinoenderana nekuverenga kwedu, pjsip inodiwa ingangoita 190 KB, uye isu tasara nezana chete reKB. Pano ndaifanira kushandisa imwe ndangariro yekunze - SDRAM (inenge 100 KB).

Mushure mese kugadziridzwa uku, ndakaona mapakeji ekutanga pakati peLinux neEmbox, uye ndakanzwa ruzha! Asi ruzha rwaityisa, rusina kutombofanana nerwepaQEMU, zvanga zvisingaite kuita chero chinhu. Takabva tafunga kuti chingava chii. Debugging yakaratidza kuti Embox haingove nenguva yekuzadza / kuburitsa odhiyo mabuffer. Ipo pjsip yaigadzirisa furemu imwe chete, 2 kukanganisa kwaive nenguva yekuitika nezve kupera kwe buffer process, izvo zvakawandisa. Pfungwa yekutanga yekumhanyisa yaive compiler optimization, asi yaive yatoverengerwa muPJSIP. Yechipiri inzvimbo inoyangarara yehardware, takataura nezvayo mukati chinyorwa. Asi sekuratidzira kwakaratidza, FPU haina kupa kuwedzera kukuru kwekumhanya. Nhanho yaitevera yaive yekuisa pamberi peshinda. Embox ine nzira dzakasiyana dzekuronga, uye ini ndakasanganisira imwe inotsigira zvinokoshesa uye kuseta maodhiyo enziyo kune yakanyanya kukosha. Izvi hazvina kubatsirawo.

Pfungwa yaitevera yaive yekuti tiri kushanda nendangariro dzekunze uye zvingave zvakanaka kufambisa zvimiro ipapo zvinowanwa kazhinji. Ndakaita preliminary analysis yekuti rinhi uye pasi pei simple_pjsua inopa ndangariro. Zvakazoitika kuti kubva pa190 Kb, yekutanga 90 Kb yakagoverwa kune zvinodiwa mukati mePJSIP uye haiwanikwe kakawanda. Kupfuurirazve, panguva yekufona iri kuuya, pjsua_call_answer basa rinodanwa, umo mabuffers anobva agoverwa kushanda nemafuremu anouya uye anobuda. Yakanga ichiri 100 KB. Zvino takaita zvinotevera. Kusvikira panguva yekufona, tinoisa iyo data mundangariro yekunze. Pakangofona, tinobva tatsiva murwi neimwe - muRAM. Nokudaro, data yose "inopisa" yakaendeswa kune kukurumidza uye kufungidzira kuyeuka.

Nekuda kweizvozvo, zvese izvi pamwe chete zvakaita kuti zvikwanise kutanga simple_pjsua uye kufona kuburikidza neserver yako. Uye zvakare kuburikidza nemamwe maseva akadai sip.linphone.org.

zvakawanikwa

Nekuda kweizvozvo, zvakakwanisika kutanga simple_pjsua nekufambisa kwezwi kumativi ose kuburikidza nesevha. Dambudziko rekuwedzera rakashandiswa 128 KB yeSDRAM rinogona kugadziriswa nekushandisa zvishoma zvine simba Cortex-M7 (semuenzaniso, STM32F769NI ine 512 KB ye RAM), asi panguva imwecheteyo, hatisati takanda tariro yekupinda mu256. KB πŸ™‚ Tichafara kana mumwe munhu achifarira, Kana zvirinani, edza. Zvese zvinyorwa, semazuva ese, zviri mune yedu repositories.

Source: www.habr.com

Voeg