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

關於AM335x starterware CAN driver問題(使用IDK及ICE V2的開發版)

各位先進大家好:

我來自台灣,我用AM335x的IDK及ICE V2開發版做工業控制應用,

遇到了幾個難題未解在dcantxrx這個starterware的project中,

首先starterware裡面有profile=EVMProfileGet();這個程序,無論ICE V2或是IDK都會在這程序內做無窮迴圈,

請問這邊是否是需要修正程序為profile=1;

其次startware監看UART串口部分的定義跟CAN使用的UART口都是UART0,所以我有修改了UART console相關程序,

並指定為UART3此程序在ICE V2下,UART監看口正常,但是在IDK以此程序運行,則會再設置baudrate程序下又是陷入死迴圈??

請問這是怎麼回事?

最終UART0設置成DCAN1不改任何設定,UART3是監看的UART串口,但是CAN口ICE V2(J9)無訊號輸出

打印出At least one of the errors………**DCAN is in Bus-off state

請問有使用過starterware裡dcan 的先進們,知道這個問題在哪嗎?

本人在TI E2E社群有反映這個問題,但因為回覆狀況不理想,請求這邊的先進協助。

Henry Chou1:

回复 Steven Liu1:

Hi! Steven兄:

明白,但俺已經移植兩個禮拜了,卡住了幾個關卡不明白,但是也有自行衝破幾處大穴,所以開文裡講的直白,

首先明顯的dcan用的是UART0硬件串口,其中的pinmux我看來是沒啥問題的,

但是裡面的打印監看串口UART也設置成UART0是故開文裡,俺有註明自己衝開的大穴是platform.lib

其中uartConsole.c需修正

#define UART_CONSOLE_BASE (SOC_UART_3_REGS) //原先是UART_0

但是以上修改ICE V2能使,IDK EVM板不能使,根據之前俺移植EtherCAT使用RTOS經驗,理應UART監看口都是UART3才是,

為何同樣的源碼運行到IDK就是死機??

另外主要大穴未沖開,因為UART0所有設置完後,俺有用watch設置讓其能運行單一封包或是多封包收發,

但是都出現bus off的錯誤訊息,這狀況只能在ICE V2跑出,而IDK用原源代碼則是啥都沒有。

附上幾個俺糾錯出現的截圖來示意一下此狀況

來此求助情非得已,因為已在米國TI E2E論壇求救許久,且往下糾錯亦無進展,想詢問高手之經驗解惑。

 

Steven Liu1:

回复 Henry Chou1:

你好,我先确认几点: 在你的设计中,你是想使用了UART3作为调试串口,实现信息的输出;同时想把UART0的两个管脚配成CAN接口实现CAN通信。

UART3的调试串口实现已经在ICE板上调通了,但是IDK调不通;CAN通信的话两个板子都没有成功。

是这样的情况吗?

首先,在硬件设置上,我想知道你的UART3的调试串口,和CAN通信接口的transceiver都是通过外加一个板子来实现的吗?在配置的时候有没有把UART0的pinmux配成CAN0的模式呢?

其次,你大可以不必费劲儿把调试串口从UART0改到UART3上,CAN0的通信接口有3种复用的模式,你可以选择另外的两种来实现,不会干扰到你的UART0调试唇口的使用,设置一下pinmux就好了。

Henry Chou1:

回复 Steven Liu1:

Hi!Steven:

感謝您提示的調試方向,但我有個愚蠢的問題,我之前看過版上跟台灣FAE都有您截圖上的pinmux配置工具的視窗,

請問這是怎麼使用的?工具是在CCS下嗎?還是需要加裝插件?

在ICE V2上以前跑過UART監控串口是在USB(VCP)的接口 ,而IDK使用的則是J10的位置(使用RTOS Uart driver毫無問題,問題是在Uartcolsole.c不改情況下,無輸出,所以才將UART_0_BASE改成UART_3_BASE).

您提及UART0可以復用,但是問題是UART0目前已經給UART轉CAN的硬件用去了,想必把UART直截當打印串口,還是得用掉一個硬件口才是,

所以原始的starterware範例,完全不改,其實是CAN口跟UART打印口都用到UART0,這不怎麼合邏輯的,但我理解mode可能不同。

我在這論壇裡有先做過功課,曾經搜尋到有先人提及dcantxrx或是dcanloopback的範例,其can口實是can1使用的是UART0,

比對TI wiki上電路原理圖(IDK及ICE V2),也是這樣沒錯,但除了uart位址對應I/O口對應到UART0外,以原本的dcantxrx源代碼dcan.c(platform.lib)

裡面又有啥是需要怎樣的修改調適,實在是無頭緒。

感謝您在這的提示,我得到在TI E2E美國那邊不同的調適偵錯方向,以上怎麼使用pinmux Tool及是否能提示uart0使用dcan1的設置欠缺甚麼,

若有心神協助,我在此非常感激。

Henry Chou

Steven Liu1:

回复 Henry Chou1:

了解。

Pinmux是个独立的工具,下载地址:http://processors.wiki.ti.com/index.php/Pin_Mux_Utility_for_ARM_MPU_Processors

对于AM335x,不要用Pinmux v3,就是你说的那个CCS下的工具,目前支持不完善。用上面连接中的工具就好了。

Henry Chou1:

回复 Steven Liu1:

感謝您的連結及耐心的回覆,實在得褒獎一下中國TI社群的技術支持,稍後我會用這個工具來輔助我調試糾錯,

目前我總結一下我的問題,也就是一個DCAN1的移植調試問題,因為未找到前人完整調試出來的發文,但隱約中看出是用UART0轉成CAN1去做CAN控制,

我搜尋過論壇裡其他做CAN口控制的例子,可惜得大家都是直截用EZSDK6.0然後用linux開發的例子,然後I/O口是外接到BBB或是ICE V2板的外擴接口,沒用現成的J9接口的經歷。

另外的小問題是只用Starterware裡面的UartConsole驅動UART監看口,發覺ICE V2能使,但IDK 卻是死機在UART_3 baudrate設置中.

然而用過RTOS裡面的Uartecho範例的經驗.函式引數uartInstance=3無誤.這個IDK,ICE V2通用.只有ICE舊版為1.

另外分享移植調試的修改部份getprofile()需要屏敝掉.並把profile引數指定為1.也就是prfile=1;不然會有 cpld內一些硬體無窮迴圈在read I2C硬件無法脫離.

Henry Chou

赞(0)
未经允许不得转载:TI中文支持网 » 關於AM335x starterware CAN driver問題(使用IDK及ICE V2的開發版)
分享到: 更多 (0)