TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F28335: UART 通訊問題

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:

客气了~是的

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F28335: UART 通訊問題
分享到: 更多 (0)