# Thermal_Vacuum
###### tags: `Read Code`,`Thermal_Vacuum`
###### src: **task_thermal_vacuum.c**, **nand_flash.c**
---
## 相關package
```C=
#include <stdio.h>
```
```C=
#include "FreeRTOS.h"
#include "os_task.h"
```
```C=
#include "HL_sys_common.h"
#include "HL_system.h"
#include "HL_sci.h"
#include "HL_adc.h"
#include "HL_reg_adc.h"
```
```C=
#include "utils.h"
#include "global.h"
#include "nand_flash.h"
```
```C=
#include "task_thermal_vacuum.h"
```
## 變數
- nand flash variables
```C=
typedef enum
{
NAND_SUCCESS,
NAND_FAIL,
NAND_IOFAIL,
NAND_ECC_ERROR,
NAND_TIMEOUT,
}NAND_STATUS;
typedef struct nand_device {
int is_initialized;
// parameters
uint32_t sector_size; // 512B , software define
uint32_t page_size; // 2048B
uint32_t block_size; // 128KB
uint32_t spare_size; // 64B not include ECC area
uint32_t pages_per_block; // 64
uint32_t num_pages; // 1024 * 64
uint32_t num_blocks; // 1024
// spi
spiBASE_t *spi;
spiDAT1_t dc;
SemaphoreHandle_t sem;
uint32_t timeout;
// functions
nand_read_fp read;
nand_write_fp write;
nand_erase_fp erase;
} nand_device_t;
uint8_t spiRWCS(nand_device_t *h, uint32_t blocksize, uint8_t * srcbuff, uint8_t * destbuff, boolean last_cshold)
nand_device_t * NANDFLASH_Init(int id);
//length: 1 ~ 2176
NAND_STATUS NANDFLASH_Read(nand_device_t *h, uint32_t address, uint8_t * destbuff, uint32_t length)
NAND_STATUS NANDFLASH_Write(nand_device_t *h, uint32_t address, uint8_t * srcbuff, uint32_t length)
NAND_STATUS NANDFLASH_Erase(nand_device_t *h, uint32_t address, uint32_t length)
```
- utils variables
```C=
typedef struct rti {
uint32_t frc;
//uint32_t uc;
}rti_t ;
void save_rti_time(rti_t *buf);
uint32_t diff_rti(rti_t *now, rti_t *past);
uint32_t compare_memory_pattern_uint16(const uint16_t *start, int len, uint16_t pattern)
```
- HL_reg_adc.h variables
```C=
#define adcREG1 ((adcBASE_t *)0xFFF7C000U)
#define adcREG2 ((adcBASE_t *)0xFFF7C200U)
```
- HL_adc.h variables
```C=
typedef struct adcData
typedef struct adcData
{
uint32 id; /**< Channel/Pin Id */
uint16 value; /**< Conversion data value */
} adcData_t;
#define adcGROUP0 0U
#define adcGROUP1 1U
#define adcGROUP2 2U
uint32 adcGetData(adcBASE_t *adc, uint32 group, adcData_t *data);
```
- else
```C=
#define ADC_CHANNELS 10
```
## pre-designed function
- uint32_t **get_current_time**()
- save_rti_time()
- diff_rti()
- rti_to_microsecond()
- int **thermal_vacuum_test_adc**()
> use my_adcStartConversion() to convert and adcGetData() get the adcdata.
- int **thermal_vacuum_test_sram**(uint32_t pattern)
> test the sram memory is equal to pattern or not.
- int **thermal_vacuum_test_flash**(uint32_t pattern)
- check those are executed successfully or not
> NAND_STATUS NANDFLASH_Read
> NAND_STATUS NANDFLASH_Write
> NAND_STATUS NANDFLASH_Erase
- void **vTask_thermal_vacuum**(void *param)
> use loop to print the information of above function.
---
###### tags: `Gemini`, `Thermal_Vacuum`