1.CS創世簡介
創世半導體成立于2016年,在香港,韓國,中國設有辦公室。創世成立是預見到5G,人工智能,物聯網等行業的崛起。用戶對芯片的需求會有新一個世代的要求。
創世半導體利用韓國,臺灣地區的芯片設計能力和供應資源,在中國實現封裝和測試,并提供本地化的服務與支持。目前專注于SD NAND存儲產品的研發和生產。
2016年,創世推出了第一代SD NAND,給客戶提供兼容性強,一致性高,焊接穩定可靠的產品。大大降低了客戶使用其他存儲產品帶來的不良率,也幫助客戶縮短了調試小容量存儲芯片驅動的研發時間,加快客戶項目的迭代速度。
2018年,為滿足更軌道交通,航空航天,工業控制,儀器儀表等行業類客戶需求,創世半導體首家推出了第二代SD NAND產品。能夠實現更快的讀寫速度,更寬泛的使用環境。能夠承受高低溫冷熱沖擊,隨機掉電等苛刻的操作環境。同時能給客戶提供個性化的固件定制服務。
2020年,隨著智能穿戴設備的興起和物聯網的不斷發展,用戶對存儲容量的需求也不斷增長。創世半導體推出了4GB SD NAND產品,能夠實現同等容量下,最小的尺寸封裝和最少的pin腳。幫助用戶推出更小巧,穩定的產品。
創世的產品已經廣泛應用于醫療設備,工業控制,軌道交通,安防,網絡設備,IPC,執法記錄儀,可視對講,門禁考勤,平板電腦,汽車電子,電力設備,工業儀器設備,POS機,教育電子等行業。成功合作客戶包括中國中車,中國航天,中國船舶集團,清華大學,糖貓,360等企業。合作CPU平臺包括:ST, NXP,TI, Microchip, Nordic, ESPRESSIF, MTK,Qualcomm等。
2.SD NAND FLASH簡介
SD NAND FLASH,即安全數字NAND閃存技術,是一種結合了NAND閃存的高密度存儲能力和安全性能的存儲解決方案。是一種非易失性存儲器技術,意味著它在斷電后仍能保存數據。它通過電荷的存儲與釋放來實現數據的存儲,基本單元結構是一個浮柵晶體管。將NAND Flash集成到SD卡中,提供了一個集成的存儲解決方案。它通常具有額外的安全特性,如加密和訪問控制,以保護存儲的數據免受未經授權的訪問或篡改。
SD NAND FLASH的工作原理與NAND Flash相似,涉及一系列的編程(寫入)、擦除和讀取操作。寫入過程:通過施加高電壓,電子被注入浮柵,改變浮柵上的電荷,進而影響晶體管的導通狀態,從而表示不同的存儲信息(通常是“0”或“1”)。采用塊擦除的方式。通過施加反向電壓,浮柵上的電子被移除,恢復晶體管的原始狀態。擦除通常是對整個塊進行操作,而不是單個字節。通過檢測浮柵上的電荷狀態,可以確定存儲單元的導通狀態,從而讀取出存儲的信息。
SD NAND FLASH具有更高的存儲密度,使其適用于需要大容量存儲的應用。提供了硬件和軟件層面的安全性保護,包括加密和訪問控制,以確保存儲的數據不容易被盜取或篡改。常用于數碼相機、手機、平板電腦等需要可移動存儲和數據保護的設備。
隨著技術的不斷發展,SD NAND FLASH在持續改進和創新。它將繼續提高性能和存儲密度,以滿足高容量、高性能的需求。同時,隨著物聯網、人工智能等技術的興起,SD NAND FLASH將在更多領域發揮重要作用,如安全攝像頭、工業控制系統等。
SD NAND FLASH是一種結合了高密度存儲能力和安全性能的存儲解決方案。它具有便攜性、高密度、安全性等優勢,并廣泛應用于各種需要可移動存儲和數據保護的設備中。隨著技術的不斷進步和應用領域的拓展,SD NAND FLASH的市場前景將更加廣闊。
創世SD NAND FLASH二代采用SDIO驅動接口,兼容SPI模式。有多種存儲容量,外圍接口電路簡單,工作電壓為3.3V,適用于各種嵌入式平臺,如STM32系列單片機。
3.SD NAND FLASH PC端測試
??將創世的SD NAND存儲芯片焊接到官方提供的測試底板,然后使用讀卡器插入電腦端,硬件實物如圖所示:
??磁盤可用大小為3.6GB。
??通過使用磁盤檢測工具對整個空間進行寫入測試,平均寫入速度可達17.6MB/S。
??在實際拷貝文件測試中,可以看到平臺寫入速度為7MB/S。
4.STM32 SDIO驅動SD NAND示例
SDIO(Secure Digital Input Output),即安全數字輸入輸出接口,是一種基于SD(Secure Digital)卡技術的擴展接口標準。SDIO最早由SD協會(SD Association,SDA)于2001年發布,作為SD卡標準的一種擴展。它允許外部設備通過標準的SD卡槽連接并通信,不僅支持傳統的存儲功能,還允許設備通過SD卡接口進行輸入輸出操作。
SDIO協議支持高達50MHz的數據傳輸速率(某些模式下甚至更高,如UHS-I模式可達到104MB/s或更高),可以實現快速的數據讀寫操作。
多設備連接:SDIO接口可以同時連接多個設備,通過多個數據線同時進行數據傳輸,提高通信效率。支持熱插拔功能,允許用戶在不關閉系統的情況下插入或移除外設,增強了系統的靈活性和易用性。同時,SDIO設備通常被劃分為多個功能單元(Function),每個功能單元可以看作是一個獨立的外設,具有自己的寄存器和配置選項。
SDIO接口繼承了SD卡的緊湊尺寸和低功耗特性,同時提供了更高的數據傳輸速率和更多的功能選項。然而,由于SDIO協議的不同版本和設備之間的差異,可能存在兼容性問題。開發人員需要針對不同的設備進行適配和測試。
4.1 STM32F10x上的SDIO接口
STM32 SDIO總線上的通信是通過傳送命令和數據實現。在多媒體卡/SD/SD I/O總線上的基本操作是命令/響應結構,這樣的總線操作在命令或總線機制下實現信息交換;另外,某些操作還具有數據令牌。
在SD/SDIO存儲器卡上傳送的數據是以數據塊的形式傳輸;在MMC上傳送的數據是以數據塊或數據流的形式傳輸;在CE-ATA設備上傳送的數據也是以數據塊的形式傳輸。
4.2 硬件接口
4.3 軟件設置
??1.芯片選擇
??2.時鐘配置
??3.SDIO配置
4.4 代碼生成
void MX_SDIO_SD_Init(void) { /* USER CODE BEGIN SDIO_Init 0 */ /* USER CODE END SDIO_Init 0 */ /* USER CODE BEGIN SDIO_Init 1 */ /* USER CODE END SDIO_Init 1 */ hsd.Instance = SDIO; hsd.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING;//在主時鐘SDIOCLK的上升沿產生SDIO_CK hsd.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE;//盤路時鐘失能 hsd.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE;//始終輸出SDIO_CK hsd.Init.BusWide = SDIO_BUS_WIDE_1B;//總線寬度 hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;//關閉硬件流控制 //當SD/SDIO卡或多媒體卡在識別模式, SDIO_CK的頻率必須低于400kHz。 hsd.Init.ClockDiv = 6;//時鐘分頻系數,SDIO_CK=HCLK/(ClockDiv+2) if (HAL_SD_Init(&hsd) != HAL_OK)//SD初始化 { Error_Handler(); } if (HAL_SD_ConfigWideBusOperation(&hsd, SDIO_BUS_WIDE_4B) != HAL_OK)//配置總線寬度 { Error_Handler(); } /* USER CODE BEGIN SDIO_Init 2 */ hsd.Init.ClockDiv=0;//重新設置時鐘速度 /* USER CODE END SDIO_Init 2 */ }
??2.SD讀寫扇區函數
??為了方便后續FATFS文件系統移植,我們這里封裝兩個函數SD卡寫扇區和讀扇區。
void SD_WriteDisk(uint8_t *buf,uint32_t sector_add,uint32_t cnt) { HAL_SD_WriteBlocks(&hsd,buf,sector_add,cnt,5000);//SD卡寫塊 while(HAL_SD_GetCardState(&hsd)!=HAL_SD_CARD_TRANSFER);//等待數據傳輸完成 } void SD_ReadDisk(uint8_t *buf,uint32_t sector_add,uint32_t cnt) { HAL_SD_ReadBlocks(&hsd,buf,sector_add,cnt,5000);//SD卡讀塊 while(HAL_SD_GetCardState(&hsd)!=HAL_SD_CARD_TRANSFER);//等待數據傳輸完成 }
??3.主函數
??初始化HAL庫、GPIO端口、LCD屏(FSMC驅動)、SD卡初始化;獲取卡類型、卡容量,最后調用SD卡讀寫扇區函數實現數據讀寫測試。
uint8_t buf_tx[4096]="SD卡SDIO驅動HAL庫配置測試數據STM32F103ZET6 -- Ver1.0"; uint8_t buf_rx[4096]; MX_GPIO_Init(); MX_FSMC_Init(); MX_SDIO_SD_Init(); MX_USART1_UART_Init(); MX_SPI2_Init(); /* USER CODE BEGIN 2 */ char buff[200]; NT35310_Init();//LCD初始化 LCD_Display_Str(LCD_WIDTH/2-strlen("SD卡初始化")/2*8,20,16,(u8 *)"SD卡初始化",BLACK); if(hsd.State!=HAL_SD_STATE_READY) { LCD_Display_Str(20,40,16,(u8 *)"SD Init ERR",RED); } else { LCD_Display_Str(20,40,16,(u8 *)"SD Init OK",RED); LCD_Display_Str(20,60,16,(u8 *)"卡類型:",RED); if(hsd.SdCard.CardType==CARD_SDHC_SDXC)//2.0告訴卡 { LCD_Display_Str(20+8+strlen("卡類型:")*8,60,16,(u8 *)"SDHC",RED); } else if(hsd.SdCard.CardType==CARD_SDSC)//2.0普通卡 { LCD_Display_Str(20+8+strlen("卡類型:")*8,60,16,(u8 *)"SDSC",RED); } snprintf(buff,sizeof(buff),"塊大小: %d byten",hsd.SdCard.BlockSize); LCD_Display_Str(20,80,16,(u8 *)buff,RED); snprintf(buff,sizeof(buff),"卡容量大小: %.2f GBn",(hsd.SdCard.BlockNbr>>11)/1024.0); LCD_Display_Str(20,100,16,(u8 *)buff,RED); } LCD_Display_Str(LCD_WIDTH/2-strlen("SD數據讀寫測試")/2*8,130,16,(u8 *)"SD數據讀寫測試",BLACK); SD_WriteDisk(buf_tx,100,2); LCD_Display_Str(20,150,16,(u8 *)"SD寫數據: OK",RED); SD_ReadDisk(buf_rx,100,3); LCD_Display_Str(20,170,16,(u8 *)"SD讀數據: OK",RED); LCD_Display_Str(20,190,16,(u8 *)"數據內容:",RED); LCD_Display_Str(20,210,16,(u8 *)buf_rx,BLUE);
4.5 運行效果
??將SD NAND FLASH插入到STM32 SD卡座上,使用SDIO方式驅動,讀取卡容量信息并進行數據讀寫測試。
審核編輯 黃宇
-
FlaSh
+關注
關注
10文章
1646瀏覽量
148963 -
ST
+關注
關注
32文章
1146瀏覽量
129307 -
SD NAND
+關注
關注
0文章
85瀏覽量
1299
發布評論請先 登錄
相關推薦
評論