找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 36281|回復(fù): 1
收起左側(cè)

ST官方USB CDC例程詳解(例程不占篇幅)

[復(fù)制鏈接]
ID:75926 發(fā)表于 2015-4-4 01:44 | 顯示全部樓層 |閱讀模式
6.ST官方USB CDC例程詳解(例程不占篇幅)

  A.RS-485的相關(guān)問(wèn)題
  ST官方的USB CDC演示例程,沒(méi)有涉及到RS485的方向控制。ST官方給出了一個(gè)文檔,能夠正確地發(fā)出RS485方向控制的
  時(shí)序。但實(shí)際要解決的問(wèn)題遠(yuǎn)遠(yuǎn)比想象中復(fù)雜。

  (1)虛擬串口的發(fā)送延遲時(shí)間設(shè)置

  在數(shù)據(jù)發(fā)送時(shí),首先ST的USB設(shè)備得按照上位機(jī)設(shè)置的發(fā)送延遲時(shí)間去工作,遺憾的是,驅(qū)動(dòng)沒(méi)有這樣的設(shè)置接口。

  ST下位機(jī)是這樣實(shí)現(xiàn)虛擬串口的數(shù)據(jù)發(fā)送:USB的OUT端點(diǎn)從PC機(jī)獲得需要out的數(shù)據(jù)包(小于或等于64),然后USB的OUT
  端點(diǎn)調(diào)用串口發(fā)送函數(shù),將數(shù)據(jù)發(fā)送出去。

  串口不存在RS-485電路時(shí),由于串口通常工作在異步狀態(tài),上位機(jī)超過(guò)64字節(jié)的包,會(huì)被分成兩個(gè)以上的包發(fā)出去,
  這不會(huì)有什么問(wèn)題。串口工作在RS485狀態(tài)時(shí),需要切換數(shù)據(jù)方向,這樣會(huì)產(chǎn)生很多不必要的換向控制。這些對(duì)工作在
  異步狀態(tài)的電路沒(méi)什么大的影響,就是對(duì)方驅(qū)動(dòng)接收的數(shù)據(jù)包零碎了點(diǎn)。

  如果ST下位機(jī)實(shí)現(xiàn)延遲發(fā)送時(shí)間設(shè)置,假設(shè)可設(shè)置延遲1-10毫秒。如果延遲10毫秒,按照每個(gè)毫秒64字節(jié)的數(shù)量統(tǒng)計(jì),
  發(fā)送640字節(jié)的大數(shù)據(jù)包時(shí),由于ST下位機(jī)由于延遲發(fā)送,640字節(jié)的數(shù)據(jù)包被打包發(fā)送出去,這樣就不存在RS-485的
  反復(fù)換向存在,這是理想狀態(tài)。在發(fā)送控制命令時(shí),F(xiàn)T232RL是專用芯片可以實(shí)現(xiàn)1毫秒的延遲,而CH340G采用DSP核
  實(shí)現(xiàn),延遲在10毫秒以上,PL2303更不靠譜,和Keil都通訊不上,其它芯片沒(méi)試過(guò)。

  (2)虛擬串口的接收緩沖設(shè)置

  異步串口通訊最大的難題是接收問(wèn)題,接收的數(shù)據(jù)必須及時(shí)地轉(zhuǎn)移到安全的位置,以防止緩沖區(qū)溢出。
  對(duì)于DSP來(lái)說(shuō),內(nèi)部有16字節(jié)的FIFO,不需要對(duì)每個(gè)字節(jié)的數(shù)據(jù)進(jìn)行實(shí)時(shí)響應(yīng),因?yàn)樗赡苡兄匾挠?jì)算任務(wù),
  不喜歡總是被通訊打斷。對(duì)ARM來(lái)說(shuō),實(shí)時(shí)響應(yīng)是是它的特長(zhǎng),因?yàn)樗闹袛嘌舆t時(shí)間非常短,再加上ARM支持的
  內(nèi)部SRAM通常比DSP豐富,安排個(gè)大緩沖不是什么難事。一般DSP設(shè)置為4096字節(jié)接收緩沖。根據(jù)實(shí)際應(yīng)用的不同,
  如果需要傳輸超大數(shù)據(jù)包,可以安排超大的數(shù)據(jù)緩沖,一般來(lái)說(shuō)小于10240字節(jié)都可以,USB1.1按照每毫秒64字節(jié)
  的通訊速度,10240字節(jié)的數(shù)據(jù)通訊需要10240/64 = 160毫秒,Windows的任務(wù)切換大約為30-40毫秒,計(jì)算機(jī)的驅(qū)動(dòng)
  正常,接收都不會(huì)出問(wèn)題。

  (3) 阻塞式串口發(fā)送占用CPU的問(wèn)題解決方法

  首先是考慮采用中斷式向外發(fā)送數(shù)據(jù),發(fā)送前切換RS485的方向,增加全局發(fā)送標(biāo)志和發(fā)送數(shù)量,則可以支持發(fā)送時(shí)的
  延遲時(shí)間設(shè)置。其次是采用DMA的方式,和中斷式類似。這些發(fā)送方式都是假設(shè)總線處于空閑的狀態(tài),并不判斷RS-485
  總線是否被占用。

  如果對(duì)中斷式或DMA方式的通訊感到煩瑣的話,也可以采用操作系統(tǒng)的方法實(shí)現(xiàn)數(shù)據(jù)發(fā)送,換向時(shí)序問(wèn)題
  也不用考慮了,對(duì)于發(fā)送任務(wù),按順序使能發(fā)送控制,發(fā)送數(shù)據(jù),關(guān)閉發(fā)送使能即可。

  (4) RS485的同時(shí)發(fā)送的碰撞問(wèn)題解決方法

  實(shí)際上RS485就是存在這種多個(gè)設(shè)備同時(shí)發(fā)送的碰撞現(xiàn)象,所以才催生出來(lái)了CAN總線。

  如果ST下位機(jī)考慮檢測(cè)總線狀態(tài),發(fā)現(xiàn)總線上有數(shù)據(jù),則設(shè)置Flag_RXD_Receiving標(biāo)志為1,同時(shí)某個(gè)毫秒計(jì)時(shí)器清0,
  并啟動(dòng)計(jì)時(shí),當(dāng)發(fā)現(xiàn)計(jì)時(shí)超過(guò)設(shè)置值(1-10)時(shí),設(shè)置Flag_RXD_Receiving標(biāo)志為0,并判斷總線空閑。

  如果將Flag_RXD_Receiving標(biāo)志的判斷添加到發(fā)送函數(shù)中,則可以避免RS-485總線的數(shù)據(jù)碰撞問(wèn)題。

西門子數(shù)控系統(tǒng)采用RS485總線通訊,
由于采用的PPI協(xié)議,延遲判斷的時(shí)間間隔是50ms,加上該協(xié)議非常嚴(yán)謹(jǐn),
所以在工業(yè)控制領(lǐng)域應(yīng)用比較廣泛,可靠性得到了充分的驗(yàn)證。Windows是強(qiáng)線程弱進(jìn)程,線程調(diào)度時(shí)間以10-15
毫秒為單位,任務(wù)調(diào)度大約是30-40毫秒。PPI協(xié)議采用公用通信組件,可協(xié)調(diào)兩個(gè)運(yùn)行實(shí)例,對(duì)同一目標(biāo)進(jìn)行控制。

而DMX512通訊協(xié)議簡(jiǎn)單而嚴(yán)格,以30毫秒為周期,和RS485總線相比,除了單向之外,88us的數(shù)據(jù)幀頭也可以通過(guò)
STM32F1額外提供,因此該USB Dual RS485設(shè)備可作為一個(gè)DMX512轉(zhuǎn)換器使用。由于目前是以USB1.1的通訊速度實(shí)現(xiàn)的,
USB1.1的CDC設(shè)備,每毫秒最多傳輸64字節(jié),在30毫秒的時(shí)間內(nèi),最多傳輸 64 * 30 = 1920 字節(jié),所以最多支持3個(gè)
DMX512接口。若采用STM32F205以上芯片,可以外掛USB2.0高速PHY芯片,實(shí)現(xiàn)更快的數(shù)據(jù)傳輸,有人實(shí)測(cè)STM32F407的
USB2.0 High Speed通訊速度可達(dá)20MB/S,達(dá)到了大多數(shù)場(chǎng)合視頻信號(hào)傳輸?shù)囊蟆?br />
專業(yè)型的USB轉(zhuǎn)串口芯片, 如CH340G、FT232RL、PL2303HX等,則無(wú)法實(shí)現(xiàn)DMX512通訊的嚴(yán)格要求。
  
USB4種不同類型的傳輸方式:控制傳輸(Control Transfer),批量傳輸(Bulk Transfer),中斷傳輸(Interrupt Transfer)和實(shí)時(shí)傳輸(IsochTransfer)
對(duì)于全速USB2.0全速設(shè)備,我們關(guān)心數(shù)據(jù)包的大小,同步實(shí)時(shí)傳輸數(shù)據(jù)包大小可以到1023字節(jié),其它傳輸方式數(shù)據(jù)包的大小都是64字節(jié)。

回復(fù)

使用道具 舉報(bào)

ID:219749 發(fā)表于 2017-7-14 20:16 | 顯示全部樓層
哥們,你在哪看到的用407的板子外掛PHY進(jìn)行高速通信的,我找了半天也沒(méi)找到相關(guān)資料。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表