發表文章

目前顯示的是有「SD card project」標籤的文章

SD card project part4 wiring and result

圖片
實體接線 我使用網路上的micro sd卡擴充模組 stm32f4腳位              micro sd卡擴充模組腳位 PB13               =>       SCK PB14               =>        MISO PB15               =>        MOSI PD8                 =>        CS 程式執行結果 int main() { uint8_t readbuff1[512];  uint8_t readbuff2[512];   const uint16_t read_offset=0; uint8_t mydata1[11]="Hello world"; uint8_t mydata2[13]="Good by world"; uint8_t res; Spi2_Init(SPI_BaudRatePrescaler_256); //spi clock frequency = APB1/256 Usart2_Int(); USART_puts(USART2,"starting init sd card \r\n");  res=SD_card_startup(); if(res==0){  SD_data_write(mydata1,1); //chose sector 1 to be w...

SD card project part3 以STM32F407VG 寫入與讀取SD卡資料 my_diskio.c & my_diskio.h

圖片
在my_diskio程式裡我們實做SD卡的起使化,讀值、和寫值 我直接按照我程式編寫的順序介紹 首先標頭檔 #include "stdint.h" #include "stm32f4xx_gpio.h" #include "stm32f4xx_spi.h" #include "stm32f4xx_rcc.h" #include "initsys.h" #include "my_diskio.h" -------------------------------------------------------------------------------------------------------- 接下來是wait_for_R1_3_6_7()這個function 這是用來在發送完指令給SD卡後接SD卡repsponse,的程式因為不同command 會對應不同的response有R1~R7詳情請自己收尋一下SD卡的spec void wait_for_R1_3_6_7(uint8_t *return_data){ uint8_t start_data; uint8_t get_first_response=7; const uint8_t data_size = 7; uint8_t i; uint8_t data[data_size]={0xff}; uint8_t data_rearranged[data_size-1]; while(data[0]==0xff){ //wait for sd card to response data[0]=SPI2_send(0Xff); } for(i=1;i<data_size;i++) { data[i]=SPI2_send(0Xff); } GPIO_SetBits(GPIOD,GPIO_Pin_8); //because sd card response is not 8bite in a row so  //we need to fi...

SD card project part2 以STM32F407VG 寫入與讀取SD卡資料 Initsys.c & Initsys.h

Initsys 包含系統硬體的起使設定其中有 USART2的設定和SPI2的設定 *注意這裡的SPI設定是適用於SD卡的若要使用在其他裝置上需要看裝置的datasheet以修改內部參數 Initsys.h 部分 #include <stm32f4xx.h> #include "stm32f4xx_gpio.h" #include "stm32f4xx_rcc.h" #include "stm32f4xx_spi.h" #include "stm32f4xx_gpio.h" #include "stm32f4xx_usart.h" #include "initsys.h" SPI_InitTypeDef SPI_InitStruct; GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; uint8_t sdcard_blocksize; --------------------------------------------------------------------------------- delay function  void delay_ms(uint32_t nms){      volatile uint32_t temp,tempval;     SysTick->LOAD=(uint32_t)nms*21000; //168000000/8 SysTick->VAL =0x00;            SysTick->CTRL=0x01 ;    do { temp=SysTick->CTRL; tempval=SysTick->VAL; } while(temp==1);   SysTick->CTRL=0x00;        SysTick-...

SD card project part1 以STM32F407VG 寫入與讀取SD卡資料 main.c

圖片
main.c 這篇為我的main.c檔,再一開始的SD卡實做我們先不加入FAT filesystem,純粹實做SD卡藉由SPI的通訊方式做資料儲存,確認好讀寫功能後再加入FAT filesystem。程式部分接會用藍字標示 首先匯入標頭檔 我使用stm網站上提供的標準外部裝置library #include "stm32f4xx.h" #include "stm32f4xx_rcc.h" #include "stm32f4xx_gpio.h" #include "stm32f4xx_spi.h" #include "stm32f4xx_usart.h" Initsys.h 和my_diskio.h是我自己編寫的標頭檔 #include "Initsys.h" #include "my_diskio.h" int main() { uint8_t readbuff1[512];  uint8_t readbuff2[512];   const uint16_t read_offset=0; uint8_t mydata1[11]="Hello world"; uint8_t mydata2[13]="Good by world"; uint8_t res; Spi2_Init(SPI_BaudRatePrescaler_256); //spi clock frequency = APB1/256 because my system clock is set to fast so in by case spi2 is in APB1 look the picture below  spi clock frequency=42MHz/256 Usart2_Int(); USART_puts(USART2,"starting init sd card \r\n");  res=SD_card_startup(); if(res==0){  SD_data_write(0,2); //chose sector 1 to b...