spi傳輸音頻數(shù)據(jù)結(jié)構(gòu)和流程機(jī)制的設(shè)計(jì)(master->slave)

一、數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)

數(shù)據(jù)的傳輸我們可以稍微參考一些網(wǎng)絡(luò)協(xié)議咬最,一段數(shù)據(jù)在傳輸過(guò)程中可能會(huì)由于各種原因使得數(shù)據(jù)不能正確被接收翎嫡,那么一個(gè)好的數(shù)據(jù)結(jié)構(gòu)和傳輸機(jī)制將會(huì)讓數(shù)據(jù)傳輸更有保障。

struct spi_data{ 
      char sync_byte;//同步位永乌,數(shù)據(jù)的開(kāi)始 
      spicmd cmd;//命令惑申,數(shù)據(jù)的意義 
      uint16 seq;//數(shù)據(jù)的序號(hào),用于確保該條數(shù)據(jù)正確被接收 
      uint16 context;//命令內(nèi)容
     uint16 crc;//crc檢驗(yàn)數(shù)據(jù)的完整
}//spi傳輸中的數(shù)據(jù)幀
enum spicmd{ 
      req_send 0x0000;//請(qǐng)求發(fā)送數(shù)據(jù)命令
      req_start;//音頻的開(kāi)始
      req_end;//音頻的結(jié)束
      rsp_oknext;//數(shù)據(jù)正確接收翅雏,請(qǐng)發(fā)下一條
      rsp_resend;//數(shù)據(jù)接收有誤圈驼,請(qǐng)重發(fā)
} 
enum decodetype{ 
      mp3 0x0000; 
      aac; 
      wav; 
      m4a; 
      … 
}//音頻格式枚舉

二、傳輸流程機(jī)制

當(dāng)發(fā)送一個(gè)音頻的時(shí)候望几,我們有必要在第一條數(shù)據(jù)中發(fā)送音頻的必須信息(例:格式绩脆、名稱、大小……)
發(fā)送第一條數(shù)據(jù)(例:test.mp3)

uint8 send_buffer[512]; 
char *audioname="test.mp3"; 
struct spidata * startdata=(struct spidata *)malloc(sizeof(spidata)); startdata->sybc_byte='S'; 
startdata->cmd=req_start; 
startdata->seq=1; 
startdata->context=sizeof(mp3)+strlen(audioname); 
startdata->crc=getCrc(&spidata,sizeof(spidata)-sizeof(spidata.crc)); send_buffer[0]='S';//同步位
send_buffer[1]=mp3; mencpy(send_buffer+2,audioname,strlen(audioname));
(uint16 *)(send_buffer+strlen(audioname)+2)=getCrc(send_buffer,strlen(send_buffer)-1);

發(fā)送該數(shù)據(jù)直至slave返回?cái)?shù)據(jù)橄抹。 當(dāng)slave接收到數(shù)據(jù)靴迫,將會(huì)根據(jù)數(shù)據(jù)正確與否回復(fù)。
1楼誓、當(dāng)數(shù)據(jù)正確回復(fù):

struct spidata *response=(struct spidata *)malloc(sizeof(spidata)); response->sync_byte='S'; 
response->cmd=rsp_oknext; 
response->seq=1; 
response->crc=getCrc(response,sizeof(spidata)-1);

2玉锌、當(dāng)數(shù)據(jù)檢驗(yàn)crc錯(cuò)誤回復(fù):
response->cmd=rsp_resend;
主機(jī)master接收到slave回復(fù)后,根據(jù)回復(fù)cmd和seq序號(hào)確保上一條數(shù)據(jù)是否正確到達(dá)疟羹。
1主守、當(dāng)收到slave回復(fù)cmd=rsp_oknext禀倔,master就發(fā)送下一條數(shù)據(jù)(音頻數(shù)據(jù))cmd=req_send
2丸逸、當(dāng)收到slaver回復(fù)cmd=rsp_resend蹋艺,master就重新發(fā)送該條數(shù)據(jù)剃袍。 當(dāng)發(fā)送音頻最后一段數(shù)據(jù)時(shí)黄刚,我們應(yīng)該發(fā)送描述音頻結(jié)束的數(shù)據(jù),以確保接收端知道數(shù)據(jù)的終結(jié)民效。 master只需發(fā)送攜帶cmd=req_end指令 即可憔维,slave根據(jù)該cmd結(jié)束接收。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末畏邢,一起剝皮案震驚了整個(gè)濱河市业扒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌舒萎,老刑警劉巖程储,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異臂寝,居然都是意外死亡章鲤,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門咆贬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)败徊,“玉大人,你說(shuō)我怎么就攤上這事掏缎≈灞模” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵眷蜈,是天一觀的道長(zhǎng)沪哺。 經(jīng)常有香客問(wèn)我,道長(zhǎng)酌儒,這世上最難降的妖魔是什么辜妓? 我笑而不...
    開(kāi)封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮今豆,結(jié)果婚禮上嫌拣,老公的妹妹穿的比我還像新娘。我一直安慰自己呆躲,他們只是感情好异逐,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著插掂,像睡著了一般灰瞻。 火紅的嫁衣襯著肌膚如雪腥例。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天酝润,我揣著相機(jī)與錄音燎竖,去河邊找鬼。 笑死要销,一個(gè)胖子當(dāng)著我的面吹牛构回,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播疏咐,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼纤掸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了浑塞?” 一聲冷哼從身側(cè)響起借跪,我...
    開(kāi)封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎酌壕,沒(méi)想到半個(gè)月后掏愁,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡卵牍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年果港,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辽慕。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡京腥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出溅蛉,到底是詐尸還是另有隱情公浪,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布船侧,位于F島的核電站欠气,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏镜撩。R本人自食惡果不足惜预柒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望袁梗。 院中可真熱鬧宜鸯,春花似錦、人聲如沸遮怜。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)锯梁。三九已至即碗,卻和暖如春焰情,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背剥懒。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工内舟, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人初橘。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓验游,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親壁却。 傳聞我的和親對(duì)象是個(gè)殘疾皇子批狱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1.1 資料 裸准,最好的入門小冊(cè)子展东,可以先于一切文檔之前看,免費(fèi)炒俱。 作者Antirez的博客盐肃,Antirez維護(hù)的R...
    JefferyLcm閱讀 17,067評(píng)論 1 51
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)权悟,斷路器砸王,智...
    卡卡羅2017閱讀 134,702評(píng)論 18 139
  • 1、復(fù)制概述: MySQL內(nèi)建的復(fù)制功能是構(gòu)建大型峦阁,高性能應(yīng)用程序的基礎(chǔ)谦铃。將mysql的數(shù)據(jù)分布到多個(gè)系統(tǒng)上去,這...
    魔法師_閱讀 5,611評(píng)論 0 5
  • 難以釋懷榔昔。這個(gè)國(guó)慶假期過(guò)了一大半了驹闰,毫無(wú)意外的又特別糟糕。 兩點(diǎn)多回到家撒会,我們倆累得夠嗆嘹朗,好像每一次都如此,連飯都...
    夢(mèng)如風(fēng)的日子閱讀 237評(píng)論 0 1
  • 1.在這個(gè)以物質(zhì)為上帝的時(shí)代诵肛,用淺薄的幸福屹培、成功來(lái)量死你的世界,你該怎樣過(guò)完你的人生怔檩?人生如夢(mèng)褪秀,你是希望枕著月亮還...
    茶涼寶加多閱讀 809評(píng)論 1 0