SPKT
Dependencies: SD-DISCO_F746NG BSP-DISCO_F746NG
Diff: main.cpp
- Revision:
- 0:6f972a6c6770
diff -r 000000000000 -r 6f972a6c6770 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Jun 10 11:05:23 2019 +0000 @@ -0,0 +1,125 @@ +#include "mbed.h" +#include "SD_DISCO_F746NG.h" + +SD_DISCO_F746NG sd; +Serial pc(USBTX, USBRX); + +#define BLOCK_START_ADDR 0 /* Block start address */ +#define NUM_OF_BLOCKS 5 /* Total number of blocks */ +#define BUFFER_WORDS_SIZE ((BLOCKSIZE * NUM_OF_BLOCKS) >> 2) /* Total data size in bytes */ + +uint32_t aTxBuffer[BUFFER_WORDS_SIZE]; +uint32_t aRxBuffer[BUFFER_WORDS_SIZE]; +/* Private function prototypes -----------------------------------------------*/ +void SD_main_test(void); +void SD_Detection(void); + +static void Fill_Buffer(uint32_t *pBuffer, uint32_t uwBufferLenght, uint32_t uwOffset); +static uint8_t Buffercmp(uint32_t* pBuffer1, uint32_t* pBuffer2, uint16_t BufferLength); + +int main() +{ + uint8_t SD_state = MSD_OK; + pc.printf("\n\nuSD start:\n\r"); + SD_state = sd.Init(); + if(SD_state != MSD_OK){ + if(SD_state == MSD_ERROR_SD_NOT_PRESENT){ + pc.printf("xin gan the SD truoc khi test\n\r"); + } else { + pc.printf("Khoi tao the SD: FAIL.\n\r"); + } + pc.printf("Kiem tra the SD bi huy bo.\n\r"); + } else { + pc.printf("Khoi tao the SD: OK.\n\r"); + SD_state = sd.Erase(BLOCK_START_ADDR, (BLOCK_START_ADDR + NUM_OF_BLOCKS - 1)); + + /* Ð?i cho d?n khi th? SD s?n sàng */ + while(sd.GetCardState() != SD_TRANSFER_OK){ + } + if (SD_state != MSD_OK){ + pc.printf("Xoa the SD: FAILED.\n\r"); + pc.printf("Kiem tra the SD bi huy bo.\n\r"); + } else { + pc.printf("Xoa the SD: OK.\n\r"); + + /* Ghi vào b? d?m */ + Fill_Buffer(aTxBuffer, BUFFER_WORDS_SIZE, 0x2300); + + SD_state = sd.WriteBlocks(aTxBuffer, BLOCK_START_ADDR, NUM_OF_BLOCKS, 10000); + /* Ð?i cho d?n khi th? SD s?n sàng */ + while(sd.GetCardState() != SD_TRANSFER_OK){ + } + + if (SD_state != MSD_OK){ + pc.printf("Ghi du lieu len the SD: FAILED.\n\r"); + pc.printf("Kiem tra the SD bi huy bo.\n\r"); + } else { + pc.printf("Ghi du lieu len the SD: OK.\n\r"); + SD_state = sd.ReadBlocks(aRxBuffer, BLOCK_START_ADDR, NUM_OF_BLOCKS, 10000); + /*Ð?i cho d?n khi th? SD s?n sàng */ + while(sd.GetCardState() != SD_TRANSFER_OK){ + } + + if (SD_state != MSD_OK){ + pc.printf("Doc the SD: FAILED.\n\r"); + pc.printf("Kiem tra the SD bi huy bo.\n\r"); + } else { + pc.printf("Doc the SD: OK.\n\r"); + if(Buffercmp(aTxBuffer, aRxBuffer, BUFFER_WORDS_SIZE) > 0){ + pc.printf("So sanh the SD: FAILED.\n\r"); + pc.printf("Kiem tra the SD bi huy bo.\n\r"); + } else { + pc.printf("Kiem tra the SD: OK.\n\r"); + pc.printf("Co the go bo the SD.\n\r"); + } + } + } + } + } + + while (1) { + } +} + +/** + * @brief Ði?n vào b? d?m v?i d? li?u du?c xác d?nh tru?c c?a ngu?i dùng + * @param pBuffer: con tr? trên b? d?m d? di?n + * @param uwBufferLenght: kích thu?c c?a b? d?m d? di?n + * @param uwOffset: giá tr? d?u tiên d? di?n vào b? d?m + * @retval None + */ +static void Fill_Buffer(uint32_t *pBuffer, uint32_t uwBufferLength, uint32_t uwOffset) +{ + uint32_t tmpIndex = 0; + + /* Put in global buffer different values */ + for (tmpIndex = 0; tmpIndex < uwBufferLength; tmpIndex++ ) + { + pBuffer[tmpIndex] = tmpIndex + uwOffset; + } +} + +/** + * @brief So sánh hai b? d?m + * @param pBuffer1, pBuffer2: b? d?m du?c so sánh + * @param BufferLength: chi?u dài b? d?m + * @retval 1: pBuffer identical to pBuffer1 + * 0: pBuffer differs from pBuffer1 + */ +static uint8_t Buffercmp(uint32_t* pBuffer1, uint32_t* pBuffer2, uint16_t BufferLength) +{ + while (BufferLength--) + { + if (*pBuffer1 != *pBuffer2) + { + return 1; + } + + pBuffer1++; + pBuffer2++; + } + + return 0; +} + +