отладка в оперативной памяти (из 64кб - 40кб под прошивку 24кб оставшаяся оперативная память)
Создал проект с тремя основными функциями - инициализация SDHC (предполагается работа только с одной картой), чтение N секторов в буфер начиная со стартового адреса,
запись N секторов из буфера начиная со стартового адреса, проверял на буферах размером до 8 секторов, всё надежно работает.
Пытаюсь подключить библиотеку, нужно написать функцию disk_read:
Спойлер
DRESULT disk_read (BYTE pdrv, /* Physical drive nmuber to identify the drive */
BYTE *buff, /* Data buffer to store read data */
DWORD sector, /* Start sector in LBA */
UINT count /* Number of sectors to read */
)
{
//////////////////////////////////////////////////////////////////////////
if(0 == spi_SD_Read_Block(buff, sector, uint8_t (count))) {return RES_OK;}
else {return RES_ERROR;}
//////////////////////////////////////////////////////////////////////////
}
моя функция:fatfs/diskio.cpp(159): error: no matching function for call to 'spi_SD_Read_Block'
Спойлер
unsigned char spi_SD_Read_Block (char* bf, uint32_t SD_adr, uint8_t adr_count) //чтение секторов из SD карты{
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
unsigned char result;
long int cnt = 0;
//*******************************************************************************************************************
for(uint8_t i=0; i < adr_count; i++)
{
SD_adr = SD_adr+i;
unsigned char SD_adr_0 = SD_adr; //разбивка адреса uint32_t на 4 байта
unsigned char SD_adr_1 = SD_adr >> 8;
unsigned char SD_adr_2 = SD_adr >> 16;
unsigned char SD_adr_3 = SD_adr >> 24;
//-----------------------------------------------------------------------------------------------------------------
first_ACMD17 = spi_WaitReady();
if(first_ACMD17 == waiting) {return 1;} //превышено время ожидания
spi_SD_cmd (0x51, SD_adr_3, SD_adr_2, SD_adr_1, SD_adr_0, 0x95); //CMD17 даташит стр 50 и 96
cnt=0;
do
{
result=spi_SendRecvByte(0xFF);
cnt++;
}
while ((result!=0x00) && (cnt < waiting));
after_ACMD17 = cnt;
if (cnt == waiting) return 2; //превышено время ожидания
spi_SendRecvByte(0xFF);
cnt=0;
do //Ждем начала блока
{
result=spi_SendRecvByte(0xFF);
cnt++;
}
while ((result!=0xFE) && (cnt < waiting));
first_read = cnt;
if (cnt == waiting) return 3;
for (cnt=0;cnt<512;cnt++) bf[cnt+(512*i)]=spi_SendRecvByte(0xFF); //получаем байты блока из шины в буфер
spi_SendRecvByte(0xFF); //Получаем контрольную сумму
spi_SendRecvByte(0xFF);
}
return 0;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
Второй вопрос: я саму библиотеку правильно скачал http://elm-chan.org/fsw/ff/arc/ff13c.zip ?
Третий вопрос: мой проект написан на C++ а библиотека FatFs на C, как правильно, в этом случае, её подключать?


