SPKT
Dependencies: SD-DISCO_F746NG BSP-DISCO_F746NG
main.cpp@0:6f972a6c6770, 2019-06-10 (annotated)
- Committer:
- nhancap98
- Date:
- Mon Jun 10 11:05:23 2019 +0000
- Revision:
- 0:6f972a6c6770
SPKT
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nhancap98 | 0:6f972a6c6770 | 1 | #include "mbed.h" |
nhancap98 | 0:6f972a6c6770 | 2 | #include "SD_DISCO_F746NG.h" |
nhancap98 | 0:6f972a6c6770 | 3 | |
nhancap98 | 0:6f972a6c6770 | 4 | SD_DISCO_F746NG sd; |
nhancap98 | 0:6f972a6c6770 | 5 | Serial pc(USBTX, USBRX); |
nhancap98 | 0:6f972a6c6770 | 6 | |
nhancap98 | 0:6f972a6c6770 | 7 | #define BLOCK_START_ADDR 0 /* Block start address */ |
nhancap98 | 0:6f972a6c6770 | 8 | #define NUM_OF_BLOCKS 5 /* Total number of blocks */ |
nhancap98 | 0:6f972a6c6770 | 9 | #define BUFFER_WORDS_SIZE ((BLOCKSIZE * NUM_OF_BLOCKS) >> 2) /* Total data size in bytes */ |
nhancap98 | 0:6f972a6c6770 | 10 | |
nhancap98 | 0:6f972a6c6770 | 11 | uint32_t aTxBuffer[BUFFER_WORDS_SIZE]; |
nhancap98 | 0:6f972a6c6770 | 12 | uint32_t aRxBuffer[BUFFER_WORDS_SIZE]; |
nhancap98 | 0:6f972a6c6770 | 13 | /* Private function prototypes -----------------------------------------------*/ |
nhancap98 | 0:6f972a6c6770 | 14 | void SD_main_test(void); |
nhancap98 | 0:6f972a6c6770 | 15 | void SD_Detection(void); |
nhancap98 | 0:6f972a6c6770 | 16 | |
nhancap98 | 0:6f972a6c6770 | 17 | static void Fill_Buffer(uint32_t *pBuffer, uint32_t uwBufferLenght, uint32_t uwOffset); |
nhancap98 | 0:6f972a6c6770 | 18 | static uint8_t Buffercmp(uint32_t* pBuffer1, uint32_t* pBuffer2, uint16_t BufferLength); |
nhancap98 | 0:6f972a6c6770 | 19 | |
nhancap98 | 0:6f972a6c6770 | 20 | int main() |
nhancap98 | 0:6f972a6c6770 | 21 | { |
nhancap98 | 0:6f972a6c6770 | 22 | uint8_t SD_state = MSD_OK; |
nhancap98 | 0:6f972a6c6770 | 23 | pc.printf("\n\nuSD start:\n\r"); |
nhancap98 | 0:6f972a6c6770 | 24 | SD_state = sd.Init(); |
nhancap98 | 0:6f972a6c6770 | 25 | if(SD_state != MSD_OK){ |
nhancap98 | 0:6f972a6c6770 | 26 | if(SD_state == MSD_ERROR_SD_NOT_PRESENT){ |
nhancap98 | 0:6f972a6c6770 | 27 | pc.printf("xin gan the SD truoc khi test\n\r"); |
nhancap98 | 0:6f972a6c6770 | 28 | } else { |
nhancap98 | 0:6f972a6c6770 | 29 | pc.printf("Khoi tao the SD: FAIL.\n\r"); |
nhancap98 | 0:6f972a6c6770 | 30 | } |
nhancap98 | 0:6f972a6c6770 | 31 | pc.printf("Kiem tra the SD bi huy bo.\n\r"); |
nhancap98 | 0:6f972a6c6770 | 32 | } else { |
nhancap98 | 0:6f972a6c6770 | 33 | pc.printf("Khoi tao the SD: OK.\n\r"); |
nhancap98 | 0:6f972a6c6770 | 34 | SD_state = sd.Erase(BLOCK_START_ADDR, (BLOCK_START_ADDR + NUM_OF_BLOCKS - 1)); |
nhancap98 | 0:6f972a6c6770 | 35 | |
nhancap98 | 0:6f972a6c6770 | 36 | /* Ð?i cho d?n khi th? SD s?n sàng */ |
nhancap98 | 0:6f972a6c6770 | 37 | while(sd.GetCardState() != SD_TRANSFER_OK){ |
nhancap98 | 0:6f972a6c6770 | 38 | } |
nhancap98 | 0:6f972a6c6770 | 39 | if (SD_state != MSD_OK){ |
nhancap98 | 0:6f972a6c6770 | 40 | pc.printf("Xoa the SD: FAILED.\n\r"); |
nhancap98 | 0:6f972a6c6770 | 41 | pc.printf("Kiem tra the SD bi huy bo.\n\r"); |
nhancap98 | 0:6f972a6c6770 | 42 | } else { |
nhancap98 | 0:6f972a6c6770 | 43 | pc.printf("Xoa the SD: OK.\n\r"); |
nhancap98 | 0:6f972a6c6770 | 44 | |
nhancap98 | 0:6f972a6c6770 | 45 | /* Ghi vào b? d?m */ |
nhancap98 | 0:6f972a6c6770 | 46 | Fill_Buffer(aTxBuffer, BUFFER_WORDS_SIZE, 0x2300); |
nhancap98 | 0:6f972a6c6770 | 47 | |
nhancap98 | 0:6f972a6c6770 | 48 | SD_state = sd.WriteBlocks(aTxBuffer, BLOCK_START_ADDR, NUM_OF_BLOCKS, 10000); |
nhancap98 | 0:6f972a6c6770 | 49 | /* Ð?i cho d?n khi th? SD s?n sàng */ |
nhancap98 | 0:6f972a6c6770 | 50 | while(sd.GetCardState() != SD_TRANSFER_OK){ |
nhancap98 | 0:6f972a6c6770 | 51 | } |
nhancap98 | 0:6f972a6c6770 | 52 | |
nhancap98 | 0:6f972a6c6770 | 53 | if (SD_state != MSD_OK){ |
nhancap98 | 0:6f972a6c6770 | 54 | pc.printf("Ghi du lieu len the SD: FAILED.\n\r"); |
nhancap98 | 0:6f972a6c6770 | 55 | pc.printf("Kiem tra the SD bi huy bo.\n\r"); |
nhancap98 | 0:6f972a6c6770 | 56 | } else { |
nhancap98 | 0:6f972a6c6770 | 57 | pc.printf("Ghi du lieu len the SD: OK.\n\r"); |
nhancap98 | 0:6f972a6c6770 | 58 | SD_state = sd.ReadBlocks(aRxBuffer, BLOCK_START_ADDR, NUM_OF_BLOCKS, 10000); |
nhancap98 | 0:6f972a6c6770 | 59 | /*Ð?i cho d?n khi th? SD s?n sàng */ |
nhancap98 | 0:6f972a6c6770 | 60 | while(sd.GetCardState() != SD_TRANSFER_OK){ |
nhancap98 | 0:6f972a6c6770 | 61 | } |
nhancap98 | 0:6f972a6c6770 | 62 | |
nhancap98 | 0:6f972a6c6770 | 63 | if (SD_state != MSD_OK){ |
nhancap98 | 0:6f972a6c6770 | 64 | pc.printf("Doc the SD: FAILED.\n\r"); |
nhancap98 | 0:6f972a6c6770 | 65 | pc.printf("Kiem tra the SD bi huy bo.\n\r"); |
nhancap98 | 0:6f972a6c6770 | 66 | } else { |
nhancap98 | 0:6f972a6c6770 | 67 | pc.printf("Doc the SD: OK.\n\r"); |
nhancap98 | 0:6f972a6c6770 | 68 | if(Buffercmp(aTxBuffer, aRxBuffer, BUFFER_WORDS_SIZE) > 0){ |
nhancap98 | 0:6f972a6c6770 | 69 | pc.printf("So sanh the SD: FAILED.\n\r"); |
nhancap98 | 0:6f972a6c6770 | 70 | pc.printf("Kiem tra the SD bi huy bo.\n\r"); |
nhancap98 | 0:6f972a6c6770 | 71 | } else { |
nhancap98 | 0:6f972a6c6770 | 72 | pc.printf("Kiem tra the SD: OK.\n\r"); |
nhancap98 | 0:6f972a6c6770 | 73 | pc.printf("Co the go bo the SD.\n\r"); |
nhancap98 | 0:6f972a6c6770 | 74 | } |
nhancap98 | 0:6f972a6c6770 | 75 | } |
nhancap98 | 0:6f972a6c6770 | 76 | } |
nhancap98 | 0:6f972a6c6770 | 77 | } |
nhancap98 | 0:6f972a6c6770 | 78 | } |
nhancap98 | 0:6f972a6c6770 | 79 | |
nhancap98 | 0:6f972a6c6770 | 80 | while (1) { |
nhancap98 | 0:6f972a6c6770 | 81 | } |
nhancap98 | 0:6f972a6c6770 | 82 | } |
nhancap98 | 0:6f972a6c6770 | 83 | |
nhancap98 | 0:6f972a6c6770 | 84 | /** |
nhancap98 | 0:6f972a6c6770 | 85 | * @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 |
nhancap98 | 0:6f972a6c6770 | 86 | * @param pBuffer: con tr? trên b? d?m d? di?n |
nhancap98 | 0:6f972a6c6770 | 87 | * @param uwBufferLenght: kích thu?c c?a b? d?m d? di?n |
nhancap98 | 0:6f972a6c6770 | 88 | * @param uwOffset: giá tr? d?u tiên d? di?n vào b? d?m |
nhancap98 | 0:6f972a6c6770 | 89 | * @retval None |
nhancap98 | 0:6f972a6c6770 | 90 | */ |
nhancap98 | 0:6f972a6c6770 | 91 | static void Fill_Buffer(uint32_t *pBuffer, uint32_t uwBufferLength, uint32_t uwOffset) |
nhancap98 | 0:6f972a6c6770 | 92 | { |
nhancap98 | 0:6f972a6c6770 | 93 | uint32_t tmpIndex = 0; |
nhancap98 | 0:6f972a6c6770 | 94 | |
nhancap98 | 0:6f972a6c6770 | 95 | /* Put in global buffer different values */ |
nhancap98 | 0:6f972a6c6770 | 96 | for (tmpIndex = 0; tmpIndex < uwBufferLength; tmpIndex++ ) |
nhancap98 | 0:6f972a6c6770 | 97 | { |
nhancap98 | 0:6f972a6c6770 | 98 | pBuffer[tmpIndex] = tmpIndex + uwOffset; |
nhancap98 | 0:6f972a6c6770 | 99 | } |
nhancap98 | 0:6f972a6c6770 | 100 | } |
nhancap98 | 0:6f972a6c6770 | 101 | |
nhancap98 | 0:6f972a6c6770 | 102 | /** |
nhancap98 | 0:6f972a6c6770 | 103 | * @brief So sánh hai b? d?m |
nhancap98 | 0:6f972a6c6770 | 104 | * @param pBuffer1, pBuffer2: b? d?m du?c so sánh |
nhancap98 | 0:6f972a6c6770 | 105 | * @param BufferLength: chi?u dài b? d?m |
nhancap98 | 0:6f972a6c6770 | 106 | * @retval 1: pBuffer identical to pBuffer1 |
nhancap98 | 0:6f972a6c6770 | 107 | * 0: pBuffer differs from pBuffer1 |
nhancap98 | 0:6f972a6c6770 | 108 | */ |
nhancap98 | 0:6f972a6c6770 | 109 | static uint8_t Buffercmp(uint32_t* pBuffer1, uint32_t* pBuffer2, uint16_t BufferLength) |
nhancap98 | 0:6f972a6c6770 | 110 | { |
nhancap98 | 0:6f972a6c6770 | 111 | while (BufferLength--) |
nhancap98 | 0:6f972a6c6770 | 112 | { |
nhancap98 | 0:6f972a6c6770 | 113 | if (*pBuffer1 != *pBuffer2) |
nhancap98 | 0:6f972a6c6770 | 114 | { |
nhancap98 | 0:6f972a6c6770 | 115 | return 1; |
nhancap98 | 0:6f972a6c6770 | 116 | } |
nhancap98 | 0:6f972a6c6770 | 117 | |
nhancap98 | 0:6f972a6c6770 | 118 | pBuffer1++; |
nhancap98 | 0:6f972a6c6770 | 119 | pBuffer2++; |
nhancap98 | 0:6f972a6c6770 | 120 | } |
nhancap98 | 0:6f972a6c6770 | 121 | |
nhancap98 | 0:6f972a6c6770 | 122 | return 0; |
nhancap98 | 0:6f972a6c6770 | 123 | } |
nhancap98 | 0:6f972a6c6770 | 124 | |
nhancap98 | 0:6f972a6c6770 | 125 |