主题中讨论的其他器件: C2000WARE
尊敬的先生,
我正在尝试实现 USB_DEV_serial 示例。 为此、我需要在 C2000ware 中安装 TI 提供的驱动程序。 但我无法 从 CA 生成软件发布者证书。 那么、在 TMS320F28375S 上实现 USB 还有其他方法吗?
此致、
Digvijay
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
尊敬的先生,
我正在尝试实现 USB_DEV_serial 示例。 为此、我需要在 C2000ware 中安装 TI 提供的驱动程序。 但我无法 从 CA 生成软件发布者证书。 那么、在 TMS320F28375S 上实现 USB 还有其他方法吗?
此致、
Digvijay
您好、Digvijay、
您是否根据前一个线程中的 Sal 建议运行 USB 引导加载程序来测试定制板的 USB 通信? 我认为这是验证您设备的 USB 配置是否正确的好步骤。
请查看 C2000ware 中的示例:
C:\ti\c2000Ware_1_00_06_00\utilities\flash_programmers\USB_flash_programmer
最棒的
Kevin
尊敬的先生/女士:
请尽快回复。 情况紧急。
我能够实现 USB_DEV_serial 示例。 我已将此示例集成到我的代码中。 构建代码时没有错误。 但是、在实施示例时存在某些问题。
当我使用 调试器转储 USB_DEV_serial 示例,然后使用调试器立即转储代码时,代码工作正常。 但是 、当我尝试单独转储代码时、它不起作用。 此外、当我用我的代码对控制器进行循环通电时、它不起作用。 此时将弹出一条消息、说明 USB 设备出现故障。
那么、原因可能是什么??
我已连接弹出窗口和设备管理器的快照。
此致、
Digvijay
您好!
我已附加我的2837xD_FLASH_lnk_CPU1.cmd 文件。 请尽快回复。
存储器
{
第0页:/* 程序内存*/
/*内存(RAM/FLASH)块可移动到 Page1进行数据分配*/
/* begin 用于"引导至闪存"引导加载程序模式 */
开始 :origin = 0x080000,length = 0x000002//80002
RAMM0 :origin = 0x000122,length = 0x0002DE //400
RAMD0 :origin = 0x00B000、length = 0x000800 // B800
RAMLS0 :origin = 0x008000、length = 0x002800
// RAMLS0 :origin = 0x008000,length = 0x000800
// RAMLS1 :origin = 0x008800,length = 0x000800
// RAMLS2 :origin = 0x009000,length = 0x000800
// RAMLS3 :origin = 0x009800,length = 0x000800
// RAMLS4 :origin = 0x00A000,length = 0x000800
RAMGS14 :origin = 0x01A000,length = 0x001000
RAMGS15 :origin = 0x01B000,length = 0x001000
复位 :origin = 0x3FFFC0,length = 0x000002
/*闪存扇区*/
FLASH_A_N :origin = 0x080002、length = 0x03FFFE
// FLASHA :origin = 0x080002,length = 0x001FFE //片上闪存*/
// FLASHB :origin = 0x082000,length = 0x002000 //片上闪存*/
// FLASHC :origin = 0x084000,length = 0x002000 //片上闪存*/
// FLASHD :origin = 0x086000,length = 0x002000 //片上闪存*/
// FLASHE :origin = 0x088000,length = 0x008000 //片上闪存*/
// FLASHF :origin = 0x090000,length = 0x008000 //片上闪存*/
// FLASHG :origin = 0x098000,length = 0x008000 //片上闪存*/
// FLASHH :origin = 0x0A0000,length = 0x008000 //片上闪存*/
// FLASHI :origin = 0x0A8000,length = 0x008000 //片上闪存*/
// FLASHJ :origin = 0x0B0000,length = 0x008000 //片上闪存*/
// FLASHK :origin = 0x0B8000、length = 0x002000 //片上闪存*/
// FLASHL :origin = 0x0BA000、length = 0x002000 //片上闪存*/
// FLASHM :origin = 0x0BC000、length = 0x002000 //片上闪存*/
// FLASHN :origin = 0x0BE000,length = 0x002000 //片上闪存*/
第1页:/*数据存储器*/
/*内存(RAM/FLASH)块可移动到 PAGE0进行程序分配*/
BOOT_RSVD :origin = 0x000002,length = 0x000120 // M0的一部分,引导 ROM 将此用于栈*/
RAMM1 :origin = 0x000400、length = 0x000400 //片上 RAM 块 M1 *
RAMD1 :origin = 0x00B800,length = 0x000800
RAMLS5 :origin = 0x00A800,length = 0x000800
RAMGS0 :origin = 0x00C000,length = 0X014000
// RAMGS0 :origin = 0x00C000,length = 0x001000
// RAMGS1 :origin = 0x00D000,length = 0x001000
// RAMGS2 :origin = 0x00E000,length = 0x001000
// RAMGS3 :origin = 0x00F000,length = 0x001000
// RAMGS4 :origin = 0x010000,length = 0x001000
// RAMGS5 :origin = 0x011000,length = 0x001000
// RAMGS6 :origin = 0x012000,length = 0x001000
// RAMGS7 :origin = 0x013000,length = 0x001000
// RAMGS8 :origin = 0x014000,length = 0x001000
// RAMGS9 :origin = 0x015000,length = 0x001000
// RAMGS10 :origin = 0x016000,length = 0x001000
// RAMGS11 :origin = 0x017000,length = 0x001000
// RAMGS12 :origin = 0x018000,length = 0x001000
// RAMGS13 :origin = 0x019000,length = 0x001000
CPU2TOCPU1RAM :origin = 0x03F800,length = 0x000400
CPU1TOCPU2RAM :origin = 0x03FC00,length = 0x000400
}
部分
{
/*分配计划领域:*/
.cinit :> flash_a_N page = 0,align (4)
.pinit :> FLASH_A_N、 PAGE = 0、ALIGN (4)
.text :>> flash_a_N page = 0,align (4)
codestart :> begin page = 0,align (4)
/*分配未初始化的数据段:*/
.stack :>RAMM1 page = 1.
.ebss :>> RAMLS5 | RAMGS0 PAGE = 1.
.esysmem :> RAMLS5 PAGE = 1.
.cio :> RAMLS5 PAGE = 1.
/*初始化段进入闪存*/
.econst :>> flash_a_N page = 0,align (4)
.switch :> FLASH_A_N PAGE = 0,ALIGN (4)
.reset :> reset, page = 0,type = DSECT //未使用,*/
filter_RegsFile :> RAMGS0, PAGE = 1
SHARERAMGS0 :> RAMGS0, PAGE = 1
SHARERAMGS1 :>RAMGS0, PAGE = 1
RAMS0 :>RAMGS0, PAGE = 1
RAMS1 :> RAMGS0, PAGE = 1
#ifdef __TI_Compiler_version__
#if __TI_Compiler_version__>=15009000
.TI.ramfunc:{} load = flash_a_N,
运行= RAMLS0、
load_start (_RamfuncsLoadStart)、
load_size (_RamfuncsLoadSize)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)、
run_size (_RamfuncsRunSize)、
run_end (_RamfuncsRunEnd)、
PAGE = 0、ALIGN (4)
其他
ramfuncs :load = FLASHD,
运行= RAMLS0、
load_start (_RamfuncsLoadStart)、
load_size (_RamfuncsLoadSize)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)、
run_size (_RamfuncsRunSize)、
run_end (_RamfuncsRunEnd)、
PAGE = 0、ALIGN (4)
#endif
#endif
/*使用 IPC API 驱动程序时需要以下部分定义*/
组:> CPU1TOCPU2RAM,PAGE = 1
{
PUTBUFFER
PUTWRITEIDX
GETREADIDX
}
组:> CPU2TOCPU1RAM,PAGE = 1
{
GETBUFFER: TYPE = DSECT
GETWRITEIDX: TYPE = DSECT
PUTREADIDX: TYPE = DSECT
}
/*分配 IQ 数学区域:*/
IQMath :> FLASH_A_N,PAGE = 0,ALIGN (4) /*数学代码*/
IQmathTables :> flash_a_N,page = 0,align (4)
/*以下部分定义适用于 SDFM 示例*/
filter1_RegsFile:> RAMGS0, PAGE = 1,fill=0x1111
Filter2_RegsFile:> RAMGS0, PAGE = 1,fill=0x2222
Filter3_RegsFile:> RAMGS0, PAGE = 1,fill=0x3333
Filter4_RegsFile:> RAMGS0, PAGE = 1,fill=0x4444
Differit_RegsFile:>RAMGS0, PAGE = 1,fill=0x3333
}
/*
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//文件结束。
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
*
此致、
Digvijay
您好、Digvijay、
下面我不清楚您的意思:
当我使用 调试器转储 USB_DEV_serial 示例,然后使用调试器立即转储代码时,代码工作正常。 但是 、当我尝试单独转储代码时、它不起作用。 此外、当我用我的代码对控制器进行循环通电时、它不起作用。 此时将弹出一条消息、说明 USB 设备出现故障。
我猜您的意思是、当您从闪存运行应用并对电路板进行下电上电时、USB 似乎未配置。
我建议首先检查您的引导模式选择引脚。 对器件进行独立闪存操作编程后、请确保将引导模式设置为从闪存引导的模式、获取模式默认设置为从闪存运行、因此请尝试此操作。 在对器件进行下电上电之前执行此操作:
如果这不能解决这个问题、那么您可能没有正确分配闪存、或者您需要从闪存复制函数以从 RAM 运行、如下所示:
#ifdef _flash memcpy (&RamfuncsRunStart、&RamfuncsLoadStart、(size_t)&RamfuncsLoadSize); #endif
最棒的
Kevin
尊敬的先生,
设备引导模式不是问题。 此外、我尝试将函数从闪存复制到 RAM、但它不起作用。 因此、剩下的唯一选项是闪存的存储器分配。 我尝试更改2837xD_FLASH_lnk_CPU1.cmd 文件。 但我无法确定要 更改哪个部分。 它会给出内存重叠等错误。 我已将2837xD_FLASH_lnk_CPU1.cmd 复制到之前的答复中。
那么,您能否给我指出一个部件,我需要更改该部件才能使 USB 从闪存工作?
如果可能、请从闪存共享 USB 的.cmd 文件。
此致、
Digvijay
您好、Digvijay、
该地址位置是引导 ROM 中的 ITRAP ISR。 出现问题。
您是否对示例或链接器命令文件进行了任何更改? 我不认为这个开箱即用示例有任何问题、我尝试了双核版本、看起来工作正常。 如果是、请尝试使用下面提供的 cmd 文件:
e2e.ti.com/.../5315.2837xS_5F00_Generic_5F00_FLASH_5F00_lnk.txt
您的电路板可能存在问题。 您是否尝试在 C2000ware 中运行任何其他示例项目?
最棒的
Kevin
尊敬的先生,
[引用 user="Kevin Allen18">您是否对示例或链接器命令文件进行了任何更改? [/报价]
我尚未对示例或链接器文件进行任何更改。
还有一个观察结果。 程序进入 ControlHandler 函数、但不进入 USB_EVENT_Connected 情况。
因此问题与 ui32Event 有关。 但我无法从 ui32Event 的价值所在确定?
uint32_t
ControlHandler (void *pvCBData、uint32_t ui32Event、
uint32_t ui32MsgValue、void *pvMsgData)
{
uint32_t ui32IntsOff;
//
//要求我们处理哪个事件?
//
switch (ui32event)
{
//
//我们已连接到主机,现在可以进行通信。
//
案例 USB_EVENT_Connected: //program 应该进入这种情况才能正常工作 USB。
G_bUSBConfigured = true;
//
//刷新缓冲区。
//
USBBufferFlush (&g_sTxBuffer);
USBBufferFlush (&g_sRxBuffer);
//
//告知主循环更新显示。
//
ui32IntsOff = IntMasterDisable();
G_pcStatus ="已连接";
G_ui32Flags |= COMMAND_STATUS_UPDATE;
if (!ui32IntsOff)
{
IntMasterEnable();
}
中断;
//
//主机已断开连接。
//
案例 USB_EVENT_DISCONNECTED:
G_bUSBConfigured = false;
ui32IntsOff = IntMasterDisable();
G_pcStatus ="已断开连接";
G_ui32Flags |= COMMAND_STATUS_UPDATE;
if (!ui32IntsOff)
{
IntMasterEnable();
}
中断;
//
//返回当前串行通信参数。
//
案例 USBD_CDC_EVENT_GET_LINE_Coding:
// GetLineCoding (pvMsgData);
中断;
//
//设置当前串行通信参数。
//
案例 USBD_CDC_EVENT_SET_LINE_Coding:
// SetLineCoding (pvMsgData);
中断;
//
//设置当前串行通信参数。
//
案例 USBD_CDC_EVENT_SET_CONTINL_LINE_STATE:
SetControlLineState ((uint16_t) ui32MsgValue);
中断;
//
//在串行线路上发送中断条件。
//
案例 USBD_CDC_EVENT_SEND_break:
SendBreak (真);
中断;
//
//清除串行线路上的中断条件。
//
案例 USBD_CDC_EVENT_CLEAR_break:
SendBreak (假);
中断;
//
//忽略暂挂并立即恢复。
//
案例 USB_EVENT_SUSPEND:
案例 USB_EVENT_RESUME:
中断;
//
//我们不希望收到任何其它事件。 请忽略该节目
//在版本编译中向上运行或在调试编译中挂起。
//
默认值:
#ifdef 调试
while (1);
其他
中断;
#endif
}
返回(0);
}