>>649
続きです。

簡単に見て気になるのは

unsigned char buffer[256*sizeof(int)]; /* maximum is 256 records */

のバッファあふれしてないか。

n = ControlUSB(reader_index,
0xA1, /* request type */
0x03, /* GET_DATA_RATES */
0x00, /* value */
buffer, sizeof(buffer));

の n の戻り値がいくつだろうか? かな。
printf とかで追ってみると手がかりがつかめるかも。