আমি একটি পিক 18 এফ 26 কে 80 এবং একটি এক্সসি 8 সংকলক ব্যবহার করছি। আমি একটি এসডি কার্ড আরম্ভ করার জন্য এবং একটি ফাইল তৈরি করার চেষ্টা করছি। আমি উইন্ডোজটিতে "FAT32" ফাইল সিস্টেম এবং 512 বাইটের একটি "বরাদ্দ ইউনিটের আকার" রাখতে সহজভাবে এসডি কার্ডটি ফর্ম্যাট করেছি। এসডি কার্ডের ধারণক্ষমতা 2 জিবি। আমি এমডিডি লাইব্রেরিটি বিধায়ক লেগ্যাসি সংস্করণ থেকে ব্যবহার করছি। আমার প্রধানটি নিম্নলিখিত:
FSFILE * file;
char sendBuffer[22] = "This is test string 1";
//**************************************************
// main function
//**************************************************
int main()
{
initIO();
LATBbits.LATB0 = 0;
// Initialise SPI and SD-card
while ( !MDD_MediaDetect() );
// Initialize the device
while ( !FSInit() );
// Initialize
#ifdef ALLOW_WRITES
// Create a new file
file = FSfopenpgm ( "FILE.TXT", "w" );
if ( file == NULL )
while(1);
// Write 21 1-byte objects from sendBuffer into the file
if ( FSfwrite ( (void *) sendBuffer, 1, 21, file ) != 21 )
while(1);
// Close the file
if ( FSfclose ( file ) )
while(1);
#endif
LATBbits.LATB0 = 1; //LED
while(1) {}
return (0);
}
প্রোগ্রামটি "FSInit ()" এর ভিতরে আটকে যায় এবং ফাংশনটি থেকে আমার যে ত্রুটিটি পাওয়া যায় তা হ'ল "CE_BAD_PARTITION", যার অর্থ "বুট রেকর্ডটি খারাপ"।
"InitIO ()" ফাংশনটি নিম্নলিখিত:
//==============================================================================
// void initIO( void );
//==============================================================================
// Sets the pins on the PIC to input or output and determines the speed of the
// internal oscilaltor
// input: none
// return: none
//==============================================================================
void initIO()
{
OSCCON = 0x75; // Clock speed = 32MHz (4x8Mhz)
TRISA = 0;
TRISB = 0;
TRISC = 0;
TRISBbits.TRISB0 = 0; //LED
TRISCbits.TRISC3 = 0; // set SCL pin as output
TRISCbits.TRISC4 = 1; // set RC4 pin as input
TRISCbits.TRISC5 = 0;
TRISAbits.TRISA5 = 0;
}
0 সেক্টরের শেষ দুটি বাইটগুলি হ'ল বুট স্বাক্ষর এবং সেগুলি 0x55 এবং 0xAA এবং আমি যে ছবিটি অন্তর্ভুক্ত করেছি তা নিশ্চিত করে। তবে "লোডএমবিআর" ফাংশনের ভিতরে নিম্নলিখিত চেকটি করা হয়েছে:
if((Partition->Signature0 != FAT_GOOD_SIGN_0) || (Partition->Signature1 != FAT_GOOD_SIGN_1))
{
FSerrno = CE_BAD_PARTITION;
error = CE_BAD_PARTITION;
}
else
{
...
}
এবং যদিও বাইটগুলি সমান হয় তবে প্রথম শর্তটি পূরণ হয় এবং এটি "CE_BAD_PARTITION" ত্রুটির সাথে ফিরে আসে।