Hi David,
Thanks so much for your response! It was very helpful.
I may have identified a problem with the FS USB stack v4.1.1:
In the file Freescale USB Stack v4.1.1\Source\Device\source\common\usb_framework.c, function USB_Strd_Req_Get_Status(), the function USB_Desc_Get_Descriptor() is called with the size parameter equal to (USB_PACKET_SIZE *)&u16DescSize. The problem is that u16DescSize is a local variable declared as a uint_16, and (USB_PACKET_SIZE *) is a uint_32 pointer. When USB_Desc_Get_Descriptor() is called from USB_Strd_Req_Get_Status() and the line *size = g_std_desc_size[type] is executed, the descriptor parameter ends up getting corrupted because it's using a uint_32 pointer to write to a uint_16 object.
This led to my problem because the descriptor parameter ended up pointing into unimplemented memory space and when the calling function tried to dereference the descriptor pointer, the processor threw an 'operand read' exception.
I tried declaring u16DescSize as a uint_32 instead of a uint_16. This indeed fixed my problem, and I'm no longer throwing the exception.
Have you heard of this before? Does this make sense to you, or am I deluded?
Thanks again for your kind assistance.
Mike
P.S. I'm telling you all of this because I think that you're a Freescale employee. If you're not, my apologies.