Part Number:TMS320F28335
問題:USB 重新插拔後,就無法接收到命令問題,
操作流程如下:
IC使用的是TMS320F28335,首先第一次自行撰寫的軟體正常打開通訊埠,從PC下達命令,PCB均正常收發命令,
而這時如果將USB (JTAG)重新拔插(PCB沒有斷電),軟體程式重新打開通訊埠,重新下達命令,此時PCB均無正常收到新的資料,
需重新將板子重新開關電才可以正常接收到命令,這會是甚麼問題?
補充說明:TX、RX均用 ISR 傳送、接收
Yale Li:
用的什么板子?芯片的串口是怎样连接到电脑的?
,
?? ?:
1.板子是自行layout,2.UART to RS232
,
Yale Li:
把仿真器拔下之后,debug连接就断开了,需要新的时序来重新连接,当然需要重新上电。
,
?? ?:
Debug連接???程式已經經過CCS燒錄在PCB板子內部,我並沒有開啟CCS Debug 監控,何謂Debug連接?
,
Yale Li:
你这里写着JTAG:
?? ? 说:而這時如果將USB (JTAG)重新拔插(PCB沒有斷電)
可否做进一步说明
,
?? ?:
之前說明可能有些許錯誤,,簡單來說就是我這邊就是透過UART轉RS232去與PCB做溝通,動作均會正常,
此時在沒有下命令時我做了一個事情,就是我只有把UART線重新拔插,PCB沒有重新開關電,
這時我重新下命令,不管怎麼下命令PCB都無法收到命令了,
此動作用途是如果PCB在沒下電情況,而PC中途拔除了UART,而之後重新插入,理論上要可以直接下Command才對
,
Yale Li:
这个问题复现的概率有多大?
在插拔前通讯线上的状态有监测过吗?
我建议先通过在线调试的方式来复现一下问题,看看有没有可能找到原因。
,
?? ?:
1.每次都發生,2.插拔前通訊都正常3.如何在線調試?
,
Yale Li:
就是先不要让板子独立运行,还是先通过调试器来调试,看看能否复现问题。
,
?? ?:
透過調適器??您的意思是開CCS ,Debug模式?
,
Yale Li:
是的
,
?? ?:
如何用CCS Debug模式測試?
USB拔除Debug模式下,通訊就斷線了,甚麼狀況也看不到啊
,
Yale Li:
我的意思就是按照开发的时候那样,连接调试器,试着复现一下问题。然后看看能不能获取到一些有用的信息。
你说的USB拔除,难道不是指UART重新插拔吗?
,
?? ?:
是的就是UART重新插拔,就接收不到上層下來的命令,PCB重新上下電就可以,好像MCU被lock一樣
,
Yale Li:
所以我们连接调试器来看一下,看看能否获得一些有用的信息。
我的想法是程序有可能陷入到了某些地方。在断开UART连接的时候,可能错过了程序中一些判断的地方,导致程序无法继续向前运行。
在获得更进一步的信息之前,这些都是推测。我们需要更多的信息来佐证我们的猜想。
,
?? ?:
我的想法也是陷入了某的地方,又或者UART跳進某的錯誤,
但…..我目前就是不知從何下手得知跳進何處程序中來解決此問題,
因連接調適器拔掉後即無法得知MCU內部狀況,
重新按下CCS Debug模式又會將MCU重置,根本無法得知程序跳到哪,
因此才需要尋求協助~~~
,
Yale Li:
在连接调试器的时候运行
,
?? ?:
無法理解連接調適器可能從何得知?
因為UART已經斷線,Debug模式也會因此無法監控,該如何測試?
,
Yale Li:
UART和debug使用的是同一个连接对吧?这一部分具体是怎么实现的可以介绍一下吗?
方便在两个器件之间进行UART通讯、实施相同的实验吗?
,
?? ?:
1.UART就是RS232,CCS Debug是xds100v22.以上兩個器件之間怎麼進行UART通訊?
,
Yale Li:
1. 我的意思就是你的UART与PC之间的通讯就是通过XDS100v2吗?
2. 我的意思是使用另外一个芯片,比如另一块F28335的板子,让两个F28335的板子之间使用UART通讯,与之前一样的操作尝试复现实验现象。这样就可以使用XDS100v2来观测了。
,
?? ?:
1.我理解你的意思了,我重新做了一次測試,如果是透過UART轉RS232的port 去下達命令控制,重新拔插UART轉RS232Port,這時""不會造成通訊無法溝通""的問題,
而如果是""透過XDS100v2"去與板子溝通,重新拔插此Port這時就會""造成無法溝通"",板子必須重新上下電才行,
《簡單來說就是透過XDS100v2去與板子通訊,只要有拔插過此Port,板子沒重新上下電,此時就會無法通訊。》2.目前手邊沒有另外一塊板子可以測試,這實驗想要驗證甚麼問題?
,
Yale Li:
好的,可以确定这个问题是并不会影响正常使用的。
XDS100调试器上有提供UART来与PC做串行通信。XDS100需要一定的时序才能与目标芯片建立连接,这个时序就包括拉低TRSTn引脚,也就是test reset引脚。所以就会出现你描述的这种情况:
?? ? 说:而這時如果將USB (JTAG)重新拔插(PCB沒有斷電),軟體程式重新打開通訊埠,重新下達命令,此時PCB均無正常收到新的資料,
因为XDS100与F28335之间实际上并没有建立连接,是处于实际上的断开状态的;
?? ? 说:需重新將板子重新開關電才可以正常接收到命令,
而执行了这样的操作以后,连接就恢复了。
所以这个问题是跟随XDS100v2的,或者说实际上并不存在问题。
,
?? ?:
Yale Li 說:XDS100调试器上有提供UART来与PC做串行通信。XDS100需要一定的时序才能与目标芯片建立连接,这个时序就包括拉低TRSTn引脚,也就是test reset引脚。所以就会出现你描述的这种情况:如果我們想要解決此問題,除了重新開關電以外,是否有辦法其他辦法?
又或者修改XDS100電路直接reset "TRSTn引脚"這樣就有解決了?
,
Yale Li:
严格来说这并不算是一个问题。
?? ? 说:如果我們想要解決此問題,除了重新開關電以外,是否有辦法其他辦法?
XDS100必须通过这样的方式与目标器件建立连接;
?? ? 说:又或者修改XDS100電路直接reset "TRSTn引脚"這樣就有解決了?
只要TRSTn被拉高(之前回复错了,是拉高)了,就会引起芯片reset级别的复位。
Yale Li 说:这个时序就包括拉低TRSTn引脚
,
?? ?:
Yale Li 說:XDS100必须通过这样的方式与目标器件建立连接;但我不能理解,今天已經XDS100 USB拔除,不應該已經斷電了嗎?為什麼重插後TRSTn 不會復歸?Yale Li 說:只要TRSTn被拉高(之前回复错了,是拉高)了,就会引起芯片reset级别的复位。所以是說沒辦法重新修改電路(如:加個Reset 按鈕,)或者其他種方式排除這問題?(在不重新開關板子電源情況)
,
Yale Li:
正如我之前所说,拉高TRSTn也只是建立调试连接的时序之一。
而事实上虽然这个信号被称作test reset,但是却并不会引起复位。
在boot的特定阶段,会判断这个引脚信号的状态,选择进入emu模式还是standalone模式:
F28335的手册中对这一块没有详细的描述,上面这个图来源于F2837xD的TRM第610页:
https://www.ti.com.cn/cn/lit/ug/spruhm8i/spruhm8i.pdf
所以再次抱歉,我这里回复得还是不是很妥当:
Yale Li 说:只要TRSTn被拉高(之前回复错了,是拉高)了,就会引起芯片reset级别的复位。
***
?? ? 说:所以是說沒辦法重新修改電路(如:加個Reset 按鈕,)或者其他種方式排除這問題?(在不重新開關板子電源情況)
解决这个问题的目的是什么?因为如果使用的是一般的UART转换器与上位机沟通,是不会存在这个问题的。这个问题并不跟随F28335。
,
?? ?:
Yale Li 说:
只要TRSTn被拉高(之前回复错了,是拉高)了,就会引起芯片reset级别的复位。****进入emu模式或者是standalone模式兩者有甚麼差別?應該如何解決我想問的問題
?? ? 说:
所以是說沒辦法重新修改電路(如:加個Reset 按鈕,)或者其他種方式排除這問題?(在不重新開關板子電源情況)
解决这个问题的目的是什么?因为如果使用的是一般的UART转换器与上位机沟通,是不会存在这个问题的。这个问题并不跟随F28335。***目的是假使,我就只想透過XDS100 上的UART 通訊,此時如果是開發階段或者未來產品客戶使用過程,都均會有可能發生先前所說的,產品在不斷電情況,重新插拔UART,此時就會造成無法重新通訊,最終就必須把產品斷電重啟才能正常,這樣操作並不符合一個符合邏輯的操作,因此想看看是否有此解決的方式。
,
Yale Li:
恢复连接的方法就是reset F28335
,
?? ?:
是硬體Reset還是軟體可以做到reset?
我重新整理一下,也就是說明如果是想要透過XDS100 上的UART通訊,而如果過程中拔插XDS100 就必就重新reset F28335,才可重新與F28335通訊,
而如果沒透過XDS100 上的UART,就不會有這個問題,我這樣說明對嗎?
,
Yale Li:
?? ? 说:是硬體Reset還是軟體可以做到reset?
硬體Reset;
?? ? 说:我重新整理一下,也就是說明如果是想要透過XDS100 上的UART通訊,而如果過程中拔插XDS100 就必就重新reset F28335,才可重新與F28335通訊,
对的;
?? ? 说:而如果沒透過XDS100 上的UART,就不會有這個問題,我這樣說明對嗎?
对的。
,
?? ?:
您說的情況是否就與以下連結說明的意思一樣
https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1020534/tms320f28335-what-is-the-function-of-trst-pin-in-dsp-tms320f28335透過XDS100 UART通訊會將TRSTn由(Low to High pin state: 0->3.3V) 因此IC腳位被拉High,這個Low to High 過程就是XDS100 UART必定與IC通訊的過程,而如果使用者過程中重新拔插XDS100 ,因為TRSTn沒有拉回Low,通訊沒有重新low to high過程,因此就會造成無法透過 XDS100 UART通訊,必須硬體reset ,才可使IC TRSTn腳位重新復歸成Low,以上這樣解釋對嗎?
,
Yale Li:
大概是正确的,但不是很准确。我之前已经回复过器件与XDS100建立连接的过程:
Yale Li 说:
在boot的特定阶段,会判断这个引脚信号的状态,选择进入emu模式还是standalone模式:
,
Yale Li:
?? ? 说:您說的情況是否就與以下連結說明的意思一樣
是一样的
,
?? ?:
對於模式的部分,我沒有非常了解,可以幫我解釋完整一點嗎?
依照先前的說法,所以透過XDS100建立连接,會將TRSTn拉高,因此進入EMU模式?而這樣如果第一次連接後TRSTn就已經拉高或拉低,那每次不就會都會進入正確對應模式?
怎會造成無法連接問題?還是是卡在流程圖哪個部分?EMU(while)??
,
Yale Li:
XDS100会将TRSTn拉高,boot ROM会在特定的时间进行检测,从而选择进入EMU模式或者standalone模式。这里类似于 程序进行判断,根据不同的结果跳转到不同的地方。
因为重新插拔了XDS100,连接已经断开,所以需要reset、重新走一遍流程来重新建立连接。
,
?? ?:
好的,那我了解最終結論就是透過XDS100過程中重新插拔就必須重新reset才會正常通訊,
原因就是每次連接都必須走流程来重新建立连接,這樣結論是對的吧?
,
Yale Li:
对的
,
?? ?:
好的,感謝,看來如果透過XDS100連接,中間有拔插過程,通訊要重新正常這問題,只有硬體reset這個解法,沒有其他做法了
,
Yale Li:
客气了~是的