spi 전송 오디 오 데이터 구조 와 프로 세 스 메커니즘 의 디자인 (master - > slave)

2237 단어
1. 데이터 구조의 디자인
데이터 의 전송 은 우 리 는 네트워크 프로 토 콜 을 조금 참고 할 수 있다. 한 단락 의 데 이 터 는 전송 과정 에서 여러 가지 원인 으로 인해 데이터 가 정확하게 수신 되 지 못 할 수도 있다. 그러면 좋 은 데이터 구조 와 전송 체 제 는 데이터 전송 을 더욱 보장 할 것 이다.
struct spi_data{ 
      char sync_byte;//   ,      
      spicmd cmd;//  ,      
      uint16 seq;//     ,              
      uint16 context;//    
     uint16 crc;//crc       
}//spi       
enum spicmd{ 
      req_send 0x0000;//        
      req_start;//     
      req_end;//     
      rsp_oknext;//      ,     
      rsp_resend;//      ,   
} 
enum decodetype{ 
      mp3 0x0000; 
      aac; 
      wav; 
      m4a; 
      … 
}//      

2. 전송 프로 세 스 메커니즘
오디 오 를 보 낼 때 첫 번 째 데이터 에서 오디 오 에 필요 한 정보 (예: 형식, 이름, 크기...) 를 보 낼 필요 가 있 습 니 다. 첫 번 째 데이터 (예: 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);

슬 레이 브 가 데 이 터 를 되 돌려 줄 때 까지 이 데 이 터 를 보 냅 니 다.slave 가 데 이 터 를 받 으 면 데이터 의 정확 여부 에 따라 답장 합 니 다.1. 데이터 가 정확하게 회 복 될 때:
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. 데이터 검사 crc 오류 답장: response->cmd=rsp_resend; 호스트 master 가 slave 답장 을 받 은 후 cmd 와 seq 번호 에 따라 이전 데이터 가 올 바 르 게 도착 하 는 지 확인 합 니 다.1. slave 답장 cmd=rsp_oknext 을 받 으 면 master 는 다음 데이터 (오디 오 데이터) cmd=req_send 를 보 냅 니 다.2. slaver 답장 cmd=rsp_resend 을 받 으 면 master 는 이 데 이 터 를 다시 보 냅 니 다.오디 오 마지막 데 이 터 를 보 낼 때, 수신 자가 데이터 의 끝 을 알 수 있 도록 오디 오 끝 을 설명 하 는 데 이 터 를 보 내야 합 니 다.master 는 휴대 cmd=req_end 명령 만 보 내 면 됩 니 다. slave 는 이 cmd 에 따라 수신 을 끝 냅 니 다.

좋은 웹페이지 즐겨찾기