победил. Вот такая обертка получилась для прямого низкоуровнего доступа к SD на базе исходников Чана
#include <protocol\fat\diskio.h>
////////////////////////////////////////////////////////////////////////////////
bool data_storage_init( void )
{
u8fast res = disk_initialize();
if( res == RES_OK ) return true;
ASSERT_STR_VAL( "data_storage_init_fail", res );
return false;
}
////////////////////////////////////////////////////////////////////////////////
bool data_storage_read( u8* dest, size_t len, u32 from_addr )
{
// sector offset bytes_qnty
u8fast res = disk_readp( (BYTE*)dest, from_addr / 512, from_addr % 512, len );
if( res == RES_OK ) return true;
ASSERT_STR_VAL( "data_storage_read_fail", res );
return false;
}
////////////////////////////////////////////////////////////////////////////////
bool data_storage_write( u8* src, size_t len, u32 to_addr )
{
u16fast lba = to_addr / 512;
u8fast res = disk_writep( 0, lba ); // Initiate sector write process
if( res != RES_OK )
{
ASSERT_STR_VAL( "Initiate sector write process fail", res );
return false;
}
res = disk_writep( (BYTE*)src, len );
if( res != RES_OK )
{
ASSERT_STR_VAL( "Send data bytes to the card fail", res );
return false;
}
res = disk_writep( 0, 0 );
if( res != RES_OK )
{
ASSERT_STR_VAL( "Finalize sector write process fail", res );
return false;
}
return true;
}