В MCI_Cmd_WriteBlock() numOfBlock и не нужна. Я тоже не знаю зачем они её туда передают...
В этой функции другая ошибка:
cmdIf.Argument = blockNum * BLOCK_LENGTH;
А должно что то типа
if(SDHC)
cmdIf.Argument = blockNum;
else
cmdIf.Argument = blockNum * BLOCK_LENGTH;
А вот в MCI_WriteBlock(), которая в свою очередь вызывает MCI_Cmd_WriteBlock() стоит
LPC_MCI->DATALEN = BLOCK_LENGTH*numOfBlock;
Кстати сегодня вышел новый релиз в котором исправлены некоторые ошибки в lpc177x_8x_mci.c
Посмотрите на
http://sw.lpcware.com/index.php