There is no format requirement for the buffer you pass in. Whatever you put in that buffer wil be sent as-is over the endpoint. You can take a simple trace (with http://www.usblyzer.com/) and confirm this.
If you can't read data back, then it could be something in the firmware preventing this. Make sure that your firmware has data to send back and that its ready.
Thank you Scutifer.
You are right there is no format requirement. The failed of reading is caused by:
1. The size to be read is not 4 byte alignment.
2. I alread post in another topic: "Why memory read failed while I set size to 0x4004, 0x4008 until 0x4018", which I still didn't find reason.