Hello there,
Im trying 4-5 days now to understand how to read and write a .txt file from a microSD card with SPI method.
I have read many posts here on melabs forums but i still didn't manage to handle a read/write at the card.
I used PIC18F26K22 with osc 8MHz x4PLL = 32Mhz. I use Hserout for debugging and hardwareSPI for the data communication betwen the MCU and the card, which are
I want to work with FAT32 format for my project and just to read for starters a txt file. I used a file i found in a post SDFSHC32D.bas and tried to adjust it with to my MCU. There was 2 pins SD_WE and SD_CD that i changed them into:Code:' Alias PIC pins and registers SDO Var PORTC.5 ' SPI data out SDO_TRIS Var TRISC.5 ' SPI data out direction SDI Var PORTC.4 ' SPI data in SDI_TRIS Var TRISC.4 ' SPI data in direction SCL Var PORTC.3 ' SPI clock SCL_TRIS Var TRISC.3 ' SPI clock direction SD_CS Var PORTC.2 ' SD card chip select SD_CS_TRIS Var TRISC.2 ' SD card chip select direction
Do you think this could cause any problems ?? The thing is that i dont want to use Card Detection or Write Protection... I didn't know any other way to skip them so i did change them into bit variablesCode:'SD_CD Var PORTB.4 ' SD card detect 'SD_CD_TRIS Var TRISB.4 ' SD card detect direction SD_CD var bit ' SD card detect Pseudo bit SD_CD_TRIS var bit ' SD card detect direction Pseudo bit SD_CD_used Var Bit 'flag to determine if CD is used or not SD_CD_used = 0 'SD_CD not used 'SD_WE Var PORTA.4 ' SD card write protect 'SD_WE_TRIS Var TRISA.4 ' SD card write protect direction SD_WE var bit ' SD card write protect Pseudo bit SD_WE_TRIS var bit ' SD card write protect direction Pseudo bit SD_WE_used var bit 'flag to determine if WE is used or not SD_WE_used = 0 'SD_WE not used![]()
My code is this:
I hope someone could drop any ideas because im new with Cards and im stuck !!!Code:'DEFINES include "modedefs.bas" include "fuses_18f26k22.bas" include "eusart_defines_ep7.bas" DEFINE OSC 8 ' REGISTERS TRISA= %00000000 TRISB= %00000011 TRISC= %00010000 'CMCON= 7 'Comparator module OFF INTCON= %11000000 'Set Pheripheral Interrupts And INT0IE INTCON2.7= 1 'INTCON3.3= 1 'PIE1.5= 1 'RC1IE: EUSART1 Receive Interrupt Enable bit ANSELA=0 ANSELB=0 ANSELC=0 include "SDFSHC32D.bas" SDC_UseHardSPI = TRUE ' Initialization Init: PORTB= 0 PORTA= 0 PORTC= 0 hserout ["Init routine: OK!",13,10] PAUSE 100 ' Main Main: hserout ["Before FSInit ",dec fat_error] Gosub FSInit pause 10 Gosub FSInit hserout ["FSInit FAT_error= ",dec fat_error] If (FAT_error != 0) Then hserout ["FSInit FAT_error= ",dec fat_error] endif FAT_FileName[0] = "N" FAT_FileName[1] = "A" FAT_FileName[2] = "M" FAT_FileName[3] = "E" FAT_FileName[4] = "S" FAT_FileName[5] = " " FAT_FileName[6] = " " FAT_FileName[7] = " " FAT_FileName[8] = "T" FAT_FileName[9] = "X" FAT_FileName[10]= "T" FAT_mode = "r" ' Read mode Gosub FSfopen hserout ["FSOpen FAT_error= ",dec fat_error] If (FAT_error != 0) Then hserout ["FSOpen FAT_error= ",dec fat_error] endif FAT_count = 1 ' Read 1 byte to buffer at a time Gosub FSfread While (FAT_error = 0) Hserout [FAT_dest[0]] FAT_count = 1 ' Read 1 byte to buffer at a time Gosub FSfread Wend pause 500 goto Main end


		
		
 

			
Bookmarks