本人没有仔细学习USB协议,所以只有照抄TI的、憋脚的USB例程了。
现在的进展情况,通过修改USB_DEV_BULK,能够在接收主机发送的信息后,向主机传送数据。
经过看例程,说运行USBBufferDataWritten函数就可以向主机传送数据,
但是,我另做了一个函数,在更新g_sTxBuffer之后,调用这个USBBufferDataWritten函数,却不能将数据传到主机,这是为什么?
谢谢大家
TX dong:
函数如下:
注:此函数目的是想把存储在SDRAM时的数据发送给上位机。void CopyUsbData2Transmit(Uint16 ch)
{tUSBRingBufObject sTxRing;Uint16 i,j,k,t,TxBlock,TxAddr ;
Uint32 WritePoint;volatile Uint32*p;if ( ch ){p= (volatile Uint32 *)0x80000000;}else{p= (volatile Uint32 *)0x80C00000;}TxBlock =TransferNumber + 1;
USBBufferInfoGet(&g_sTxBuffer, &sTxRing);
WritePoint = sTxRing.ui32WriteIndex;// write point
for ( i = 0; i < TxBlock; i++ ){for ( j = 0; j < 512; j++ ){for ( k = 0; k < 128; k++ ){// Data is 16bit in SDRAM, and transmit is 8bitt = *p;g_pui8USBTxBuffer[WritePoint] = t >> 8;WritePoint++;WritePoint = (WritePoint == BULK_BUFFER_SIZE) ? 0 : WritePoint;
g_pui8USBTxBuffer[WritePoint] = t & 0xFF;WritePoint++;WritePoint = (WritePoint == BULK_BUFFER_SIZE) ? 0 : WritePoint;
p++;}
USBBufferDataWritten(&g_sTxBuffer, /*TxBufSize*/BULK_BUFFER_SIZE );Delay_mS(1);}}
}
TX dong:
回复 TX dong:
是不是作为device就只能被动传送数据?
Susan Yang:
请问您现在使用的是哪个例程,能否给出路径?usb_dev_bulk?是否使用TI开发板?您现在主要是想实现什么功能?
另外若是可以的话,请给出/私信一下您的 工程,我们来测试一下,谢谢
Susan Yang:
回复 TX dong:
若是想USB和上位机传输数据的话,可以使用usb_dev_serial这个例程,它就是把USB模拟成串口,电脑装驱动后直接就是串口了,直接串口助手就可以了。
驱动的话,可以在下面的路径内找到C:\ti\controlSUITE\device_support\F2837xD\v210\F2837xD_common\windows_drivers
TX dong:
回复 Susan Yang:
谢谢您。
程序就是上次传给您的,不是开发板,是自己做的板子。
TX dong:
回复 Susan Yang:
下次再用了,试一下这个例程。
不过有个问题我一直没有明白,在本论坛也没有找到答案。就是,模拟串口,必须占用某个实际存在的串口吗?所占用的这个串口,端口上是不是也会有信号?
Susan Yang:
回复 TX dong:
usb_dev_serial例程是实现USB虚拟串口通信。开发板工作在USB Device模式,当连接到PC时,USB作为模拟串口使用,PC会安装驱动usb_dev_serial.inf。
USB模块在做模拟串口时,不会强制占用芯片的一个UART模块
论坛是有相关的讨论的,请查看下面的链接,Young Hu讲得非常清晰
https://e2echina.ti.com/question_answer/microcontrollers/stellaris_arm/f/57/t/2396
Susan Yang:
回复 TX dong:
另外英文论坛上也有一些讨论,TI的usb_dev_serial例程在不同MCU上实现的功能原理基本是一样的
e2e.ti.com/…/497724