Exemple #1
0
/*******************************************************************************
* Function Name  : MAL_Write
* Description    : Write sectors
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
uint16_t MAL_Write(uint8_t lun, uint32_t Memory_Offset, uint32_t *Writebuff, uint16_t Transfer_Length)
{

  switch (lun)
  {
    case 0:
#ifdef USE_STM3210E_EVAL
      Status = SD_WriteBlock(Memory_Offset, Writebuff, Transfer_Length);
      if ( Status != SD_OK )
      {
        return MAL_FAIL;
      }      
#else
      MSD_WriteBlock((uint8_t*)Writebuff, Memory_Offset, Transfer_Length);
#endif
      break;
#ifdef USE_FSMC_NAND
      case 1:
      NAND_Write(Memory_Offset, Writebuff, Transfer_Length);
      break;
#endif
    default:
      return MAL_FAIL;
  }
  return MAL_OK;
}
/*******************************************************************************
* Function Name  : Write_Memory
* Description    : Handle the Write operation to the microSD card.
* Input          : None.
* Output         : None.
* Return         : None.
*******************************************************************************/
void Write_Memory(void)
{
  uint32_t temp =  Counter + 64;


  i = 0;
  for (; Counter < temp; Counter++)
  {
    Data_Buffer[Counter] = Bulk_Data_Buff[i];
    i++;
  }

  Memory_Offset += Data_Len;
  Transfer_Length -= Data_Len;

  if (!(Transfer_Length % 512))
  {
    Counter = 0;
    MSD_WriteBlock(Data_Buffer, Memory_Offset - 512, 512);
  }

  CSW.dDataResidue -= Data_Len;
  SetEPRxStatus(ENDP2, EP_RX_VALID); /* enable the next transaction*/


  if ((Transfer_Length == 0) || (Bot_State == BOT_CSW_Send))
  {
    Counter = 0;
    Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE);
  }
}
Exemple #3
0
int main(void)
{
	
	int flag;
  int i;
	
	//only for sd testing
	extern u8 sd_recv_buf[512];
	extern u8 sd_send_buf[512];
	u8 ret = 1;
	// only for sd testing
	
	RCC_Configuration();
	RTC_Configuration();
	GPIO_Configuration();
	SPI_Configuration();
	NVIC_Configuration();
	USART_Configuration();
	EXTI_cfg();
	
	//only for sd testing
	ret = MSD_Init();
	ret = MSD_GetMediumCharacteristics();
	MSD_EarseBlock(0,Mass_Block_Count);
	//only for sd testing
	
	//system start working
	GPIO_SetBits(GPIOC,GPIO_Pin_14);
	
	//wait for the moment that the device has been fxed into the rocket
//	for (i=0;i<6*5;i++) {delay();} //delay 10 minutes

  //self-testing
  
	//first, test wireless data transmition
	
	Timedisplay=0;
	while (Timedisplay<10)
	{
		USART_SendData(USART3, 'A'); 
	  while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
		
	  if ((USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == SET)
			   && (USART_ReceiveData(USART3)==66)) //except "B"
		  {
				//static char Responce[]="Wireless data transmition test completed";
				for (i=0;i<strlen(Responce);i++)
				{
				  USART_SendData(USART3, Responce[i]); 
	        while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
				}
				break;
			}
		//USART_ClearFlag(USART3, USART_FLAG_RXNE);
	}
	
	if (Timedisplay==10)
	{
		GPIO_ResetBits(GPIOC,GPIO_Pin_14);
		//Write into SD:ERROR in data transmition
		
		//only for testing
		for (i=0;i<strlen(errorDatatransmition);i++)
			{
				sd_send_buf[i]=errorDatatransmition[i];
			}
		ret = MSD_WriteBlock(sd_send_buf,0,512);
		//only for testing
		
		return(0);
	}
	
	//waiting for the continue order
	for (i=0;i<4000;i++);
	while (1)
	{
		if ((USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == SET)
			   && (USART_ReceiveData(USART3)==78)) //except "N"
		  {
				break;
			}
		//USART_ClearFlag(USART3, USART_FLAG_RXNE);
	}
	
	//second,test GPS
  Timedisplay=0;
	flag=1;
	while ((Timedisplay<60*5) &&
		     (!((USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == SET)
			      && (USART_ReceiveData(USART3)==71))))  //except "G"
	{
	  if ((USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == SET))
		  {
				flag=1;
				USART_SendData(USART3, USART_ReceiveData(USART1)); 
	      while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
			}
		//USART_ClearFlag(USART1, USART_FLAG_RXNE);
	}
	
	if (flag==0)
	{
		GPIO_ResetBits(GPIOC,GPIO_Pin_14);
		for (i=0;i<strlen(errorGPS);i++)
		{
			USART_SendData(USART3, errorGPS[i]); 
	    while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
		}
		//Write into SD:ERROR in GPS
		for (i=0;i<strlen(errorGPS);i++)
			{
				sd_send_buf[i]=errorGPS[i];
			}
		ret = MSD_WriteBlock(sd_send_buf,1,512);
		return(0);
	}
	//static char Responce2[]="GPS test completed";
	for (i=0;i<strlen(Responce2);i++)
		{
			USART_SendData(USART3, Responce2[i]); 
	    while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
		}
		
	
	//waiting for the continue order
	for (i=0;i<4000;i++);
	while (1)
	{
		if ((USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == SET)
			   && (USART_ReceiveData(USART3)==78)) //except "N"
		  {
				break;
			}
		//USART_ClearFlag(USART3, USART_FLAG_RXNE);
	}
	
	//third, test clock
	USART_SendData(USART3, 'C'); 
	while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
	Timedisplay=0;
	flag=0;
	while ((Timedisplay<20) &&
		     (!((USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == SET)
			      && (USART_ReceiveData(USART3)==69))));  //except "E"
	
	if ((abs(Timedisplay-10)>2) &&
		    (USART_ReceiveData(USART3)==69))
	{
		GPIO_ResetBits(GPIOC,GPIO_Pin_14);
		for (i=0;i<strlen(errorclock);i++)
		{
			USART_SendData(USART3, errorclock[i]); 
	    while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
		}
		//Write into SD:ERROR in timing
		//only for testing
		for (i=0;i<strlen(errorclock);i++)
			{
				sd_send_buf[i]=errorclock[i];
			}
		ret = MSD_WriteBlock(sd_send_buf,2,512);
		//only for testing
			
		return(0);
	}
	
	//static char Responce3[]="clock test completed";
	for (i=0;i<strlen(Responce3);i++)
		{
			USART_SendData(USART3, Responce3[i]); 
	    while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
		}
	
	//static char Responce4[]="ALL test completed,wait for launching signal";
	for (i=0;i<strlen(Responce4);i++)
		{
			USART_SendData(USART3, Responce4[i]); 
	    while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
		}
	
	while (!((USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == SET)
			      && (USART_ReceiveData(USART3)==76))); //except for "L"
	
	//delay();
  
	//static char Responce5[]="Go! Good Luck!";
	for (i=0;i<strlen(Responce5);i++)
		{
			USART_SendData(USART3, Responce5[i]); 
	    while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
		}

	
	/* Enable the USART Receive interrupt: this interrupt is generated when the
     USART1 receive data register is not empty */
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
  USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
  //USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
	Timedisplay=0;
	while(1)
	{
		if (Timedisplay>=OPEN_Parachute) 
		{
			GPIO_SetBits(GPIOC,GPIO_Pin_6);
			//static char Responce6[]="The parachute is open@";
	    for (i=0;i<strlen(Responce6);i++)
	    	{
	     		USART_SendData(USART3, Responce6[i]); 
	        while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
		    }
		}
	}
	return(0);
}