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

QQ登錄

只需一步,快速開始

搜索
查看: 4222|回復(fù): 21
打印 上一主題 下一主題
收起左側(cè)

奇怪的XPT2046_ADC芯片的SPI時(shí)序!

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:232366 發(fā)表于 2021-11-11 20:56 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
今天在寫XPT2046的ADC芯片程序時(shí)發(fā)現(xiàn)的一個(gè)問(wèn)題對(duì)芯片使用SPI方式寫入指令時(shí)的時(shí)序問(wèn)題下面上邏輯分析儀波形圖:

請(qǐng)看圖一:
0通道為時(shí)鐘信號(hào)
1通道為單片機(jī)寫入信號(hào)(數(shù)據(jù))
2通道為ADC    輸出信號(hào)(數(shù)據(jù))
3通道為片選信號(hào)(略)

根據(jù)數(shù)據(jù)手冊(cè)得知:控制字節(jié)的位在時(shí)鐘的上升沿時(shí)鎖存進(jìn)去。
問(wèn)題1:就是在對(duì)于的邏輯分析儀2通道可以看到在寫入控制字節(jié)時(shí)(因?yàn)闀r(shí)鐘出現(xiàn)下降沿???)也出現(xiàn)了讀出的時(shí)序,寫入的同時(shí)就在輸出???? 而且在讀的時(shí)候同時(shí)也在寫入(是因?yàn)樽x的時(shí)候時(shí)鐘產(chǎn)生了上升沿嗎????)

問(wèn)題2:特別是BUSY忙時(shí)腳位到底時(shí)干嘛的?控制字節(jié)寫完后此腳產(chǎn)生一個(gè)時(shí)鐘周期的高電平???(是不是可以認(rèn)為是等待ADC轉(zhuǎn)換完畢的時(shí)間??)
DOUT引腳會(huì)送出ADC轉(zhuǎn)換的數(shù)字量的最高位?

虛心向論壇老鐵請(qǐng)教一下!。。。。。。。。


CS_N:芯片選中信號(hào),當(dāng)CS_N被拉低時(shí),用來(lái)控制轉(zhuǎn)換時(shí)序并使能串行輸入/輸出寄存器以移出或移入數(shù)據(jù)。當(dāng)該引腳為高電平時(shí),芯片(ADC)進(jìn)入掉電模式。
DCLK:外部時(shí)鐘輸入,該時(shí)鐘用來(lái)驅(qū)動(dòng)SARADC的轉(zhuǎn)換進(jìn)程并驅(qū)動(dòng)數(shù)字IO上的串行數(shù)據(jù)傳輸。
DIN:芯片的數(shù)據(jù)串行輸入腳,當(dāng)CS為低電平時(shí),數(shù)據(jù)在串行時(shí)鐘DCLK的上升沿被鎖存到片上的寄存器。
DOUT:串行數(shù)據(jù)輸出,在串行時(shí)鐘DCLK的下降沿?cái)?shù)據(jù)從此引腳上移出,當(dāng)CS_N引腳為高電平時(shí),該引腳為高阻態(tài)。

BUSY:忙輸出信號(hào),當(dāng)芯片接收完命令并開始轉(zhuǎn)換時(shí),該引腳產(chǎn)生一個(gè)DCLK周期的高電平。
當(dāng)該引腳由高點(diǎn)平變?yōu)榈碗娖降臅r(shí)刻,轉(zhuǎn)換結(jié)果的最高位數(shù)據(jù)呈現(xiàn)在DOUT引腳上,
主控可以讀取DOUT的值。當(dāng)CS_N引腳為高電平時(shí),BUSY引腳為高阻態(tài)。

2.PNG (45.91 KB, 下載次數(shù): 126)

完整時(shí)序圖

完整時(shí)序圖
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:517951 發(fā)表于 2021-11-12 08:42 | 只看該作者
2046這個(gè)電阻觸控IC上個(gè)月用過(guò), clcok 信號(hào)要輸入8+1+16個(gè),前面8個(gè)是寫入控制字節(jié)0x90,0xd0, 再給一個(gè)clcok用于清除busy信號(hào), 后面16個(gè)clock是用來(lái)接收12位AD轉(zhuǎn)換xy的坐標(biāo)。
問(wèn)題1: 寫入0x90,0xd0的時(shí)候,2046是不會(huì)發(fā)送AD信號(hào)的。要等busy信號(hào)清除之后,才發(fā)送。我用的過(guò)程中,寫入0x90,0xd0的時(shí)候,miso上是沒有信號(hào)跳變的,清除busy信號(hào)之后,2046才外發(fā)數(shù)據(jù)。
問(wèn)題2:busy信號(hào)是AD轉(zhuǎn)換過(guò)程需要花費(fèi)時(shí)間,完成了2046會(huì)清除。

以上是我的一點(diǎn)經(jīng)驗(yàn)共享。
回復(fù)

使用道具 舉報(bào)

板凳
ID:232366 發(fā)表于 2021-11-12 10:24 | 只看該作者
rayin 發(fā)表于 2021-11-12 08:42
2046這個(gè)電阻觸控IC上個(gè)月用過(guò), clcok 信號(hào)要輸入8+1+16個(gè),前面8個(gè)是寫入控制字節(jié)0x90,0xd0, 再給一個(gè)clc ...

非常感謝分享經(jīng)驗(yàn)!我現(xiàn)在只是使用此芯片作為ADC模塊 且并沒有把BUSY管腳到單片機(jī)上。
現(xiàn)在的這個(gè)時(shí)序好奇怪并沒有讀取DOUT的數(shù)據(jù),
寫的同時(shí)也會(huì)有數(shù)據(jù)返回。。。。。!一時(shí)半會(huì)弄不明白。。。。!
回復(fù)

使用道具 舉報(bào)

地板
ID:624769 發(fā)表于 2021-11-12 14:42 | 只看該作者
DOUT 一般需要10K上拉,你的MISO 低電平肯定有問(wèn)題,沒有信號(hào)的時(shí)候,即使IO高阻也應(yīng)該高電平。
回復(fù)

使用道具 舉報(bào)

5#
ID:232366 發(fā)表于 2021-11-12 18:12 來(lái)自手機(jī) | 只看該作者
188610329 發(fā)表于 2021-11-12 14:42
DOUT 一般需要10K上拉,你的MISO 低電平肯定有問(wèn)題,沒有信號(hào)的時(shí)候,即使IO高阻也應(yīng)該高電平。

有的!根據(jù)數(shù)據(jù)手冊(cè)所說(shuō)此腳是AD串行數(shù)字量輸出供單片機(jī)讀取 而我單片機(jī)IO腳是有對(duì)應(yīng)上拉電阻的10K應(yīng)該沒什么問(wèn)題吧? 依您所說(shuō)即使沒有信號(hào)時(shí) 和此腳IO高阻也應(yīng)該出現(xiàn)高電平狀態(tài)!但是現(xiàn)在恰恰相反! 而且出現(xiàn)電平跳變的地方也正是在寫入控制字節(jié)時(shí)的CLOCK脈沖下出現(xiàn)的?我現(xiàn)在就是因?yàn)檫@個(gè)才感到疑惑。按手冊(cè)所說(shuō)DOUT引腳是在BUSY引腳出現(xiàn)下降沿時(shí)ADC轉(zhuǎn)換結(jié)果的最高位會(huì)出現(xiàn)在DOUT引腳。現(xiàn)在恰恰是在寫入控制字節(jié)時(shí)DOUT就已經(jīng)在輸出了?在邏輯分析儀上可以看出。
回復(fù)

使用道具 舉報(bào)

6#
ID:232366 發(fā)表于 2021-11-12 21:33 | 只看該作者
回復(fù)

使用道具 舉報(bào)

7#
ID:624769 發(fā)表于 2021-11-12 22:27 | 只看該作者
你試試看 調(diào)整一下時(shí)序,

拉低CS 之后,拉高DI, 給1微秒的延時(shí)之后,再拉高時(shí)鐘線,看你的時(shí)序圖  時(shí)鐘和DI幾乎同時(shí)拉高了,是不是這個(gè)原因造成你的DOUT 又拉低了呢?因?yàn)闆]有收到有效信號(hào)?
回復(fù)

使用道具 舉報(bào)

8#
ID:232366 發(fā)表于 2021-11-14 00:02 | 只看該作者
188610329 發(fā)表于 2021-11-12 22:27
你試試看 調(diào)整一下時(shí)序,

拉低CS 之后,拉高DI, 給1微秒的延時(shí)之后,再拉高時(shí)鐘線,看你的時(shí)序圖  時(shí)鐘 ...

以按照您建議操作也并未有啥改善  反倒直接沒有輸出了!尷尬
回復(fù)

使用道具 舉報(bào)

9#
ID:420836 發(fā)表于 2021-11-14 03:48 | 只看該作者
感謝分享有關(guān) SPI 時(shí)序
回復(fù)

使用道具 舉報(bào)

10#
ID:517951 發(fā)表于 2021-11-14 09:56 | 只看該作者
用示波器抓下波形相對(duì)邏輯分析儀要準(zhǔn)確一點(diǎn), 邏輯分析儀對(duì)速度快點(diǎn)的信號(hào)可能不準(zhǔn)確,給你造成誤導(dǎo). 希望對(duì)你有用.
回復(fù)

使用道具 舉報(bào)

11#
ID:232366 發(fā)表于 2021-11-14 11:25 | 只看該作者
TTQ001 發(fā)表于 2021-11-14 03:48
感謝分享有關(guān) SPI 時(shí)序

一起學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

12#
ID:232366 發(fā)表于 2021-11-14 11:26 | 只看該作者
rayin 發(fā)表于 2021-11-14 09:56
用示波器抓下波形相對(duì)邏輯分析儀要準(zhǔn)確一點(diǎn), 邏輯分析儀對(duì)速度快點(diǎn)的信號(hào)可能不準(zhǔn)確,給你造成誤導(dǎo). 希望對(duì) ...

感謝提出建議!
回復(fù)

使用道具 舉報(bào)

13#
ID:624769 發(fā)表于 2021-11-14 12:49 | 只看該作者
SHANWAZI 發(fā)表于 2021-11-14 00:02
以按照您建議操作也并未有啥改善  反倒直接沒有輸出了!尷尬

是這個(gè)東西吧?



按時(shí)序圖上看, CS拉底后,DI 必須置1,然后再給時(shí)鐘,此時(shí)Dout會(huì)為低,所以你說(shuō)的沒“輸出”如果指為低,那么就對(duì)了。
唯一不確定的,就是下面那兩條線Dirver1 and 2,是否必須在第五個(gè)時(shí)鐘拉高,是不是必要條件,但是感覺,拉高的時(shí)機(jī)來(lái)看,必須拉高了,后面才會(huì)有Busy, Dout才會(huì)有回傳。你現(xiàn)在橫豎不成功,可以試試。
回復(fù)

使用道具 舉報(bào)

14#
ID:232366 發(fā)表于 2021-11-14 13:22 | 只看該作者

是的是的他的真正在處于轉(zhuǎn)換是不是在BUSY變成高電平后的八個(gè)時(shí)鐘周期或者是12個(gè)?
回復(fù)

使用道具 舉報(bào)

15#
ID:624769 發(fā)表于 2021-11-14 14:05 | 只看該作者
SHANWAZI 發(fā)表于 2021-11-14 13:22
是的是的他的真正在處于轉(zhuǎn)換是不是在BUSY變成高電平后的八個(gè)時(shí)鐘周期或者是12個(gè)?

真正轉(zhuǎn)換,應(yīng)該在busy為高,表示在轉(zhuǎn)換。
此時(shí)你再給一個(gè)時(shí)鐘,之后,就安靜等待Busy為低,等到busy 為低了,DOUT就會(huì)輸出,可能是1可能是0這個(gè)不用管,反正給夠12個(gè)時(shí)鐘,收足12個(gè)位數(shù)據(jù),然后再算到底是多少。
回復(fù)

使用道具 舉報(bào)

16#
ID:232366 發(fā)表于 2021-11-14 14:39 | 只看該作者
188610329 發(fā)表于 2021-11-14 14:05
真正轉(zhuǎn)換,應(yīng)該在busy為高,表示在轉(zhuǎn)換。
此時(shí)你再給一個(gè)時(shí)鐘,之后,就安靜等待Busy為低,等到busy 為 ...






實(shí)際上籃筐這里才是才是真正的AD轉(zhuǎn)換對(duì)不???也就是BUSY變?yōu)楦唠娖胶蟮?nbsp; 前面的控制字節(jié)寫完后BUSY就是高電平了,
是不是可以考慮使用一點(diǎn)延時(shí)等一下過(guò)去????BUSY的下降沿時(shí)刻會(huì)把ADC結(jié)果最高位出現(xiàn)在DOUT供外部讀取。。。。
回復(fù)

使用道具 舉報(bào)

17#
ID:624769 發(fā)表于 2021-11-14 16:32 | 只看該作者
當(dāng)Dout開始輸出的時(shí)候,轉(zhuǎn)換已經(jīng)完畢了,
所以,你唯一需要等待的,只是BUSY 變低電平。
代碼上來(lái)講,你只需要在發(fā)完P(guān)D0之后, BUSY == 1 之后,
再給一個(gè)時(shí)鐘 即第9時(shí)鐘,之后,
while(BUSY);  傻等BUSY為0即可
然后,就是接受12位數(shù)據(jù)。
按時(shí)序圖上看,收完11位數(shù)據(jù)后,收最后一位數(shù)據(jù)時(shí) Driver 2 需要給低電平,然后再給3個(gè)空時(shí)鐘,然后CS拉高。
回復(fù)

使用道具 舉報(bào)

18#
ID:232366 發(fā)表于 2021-11-14 16:59 | 只看該作者
188610329 發(fā)表于 2021-11-14 16:32
當(dāng)Dout開始輸出的時(shí)候,轉(zhuǎn)換已經(jīng)完畢了,
所以,你唯一需要等待的,只是BUSY 變低電平。
代碼上來(lái)講,你 ...

感謝指導(dǎo)。。。!  似乎明白這時(shí)序圖了。。。≡瓉(lái)一直是我看錯(cuò)時(shí)序圖了。
回復(fù)

使用道具 舉報(bào)

19#
ID:232366 發(fā)表于 2021-11-14 20:57 | 只看該作者
SHANWAZI 發(fā)表于 2021-11-14 16:59
感謝指導(dǎo)!。。!  似乎明白這時(shí)序圖了。。!原來(lái)一直是我看錯(cuò)時(shí)序圖了。



但是看起來(lái)時(shí)序也不太對(duì)  和實(shí)際輸出值差異大讀取錯(cuò)誤。。。。。。。。!
回復(fù)

使用道具 舉報(bào)

20#
ID:624769 發(fā)表于 2021-11-14 22:07 | 只看該作者
你試試看極端值,比如最低,或者最高,是不是給你全0,全1,是的話,就說(shuō)明,通訊肯定是對(duì)的,如果不是的話,那么還是分析分析Driver 1 & 2 這里是不是有什么問(wèn)題。 手冊(cè)我沒仔細(xì)看。畢竟這芯片我也沒有,研究了也沒啥用,但是,比較確定的是,Driver 1 & 2 肯定是有一定用處的。 也許是觸控板的控制,也許是ADC控制,細(xì)讀手冊(cè)吧, 按IO的標(biāo)注來(lái)看,通信協(xié)議有點(diǎn)類似 MicroWire 非常接近SPI 但不是SPI的協(xié)議,比如第一個(gè)1, 以及等待Busy, 都是MicorWire 協(xié)議的特征,所以,如果真是MicroWire協(xié)議的話,那么,時(shí)序要求是非常嚴(yán)格的,你再仔細(xì)對(duì)照手冊(cè)看看吧。不排除,要ADC之前,要額外發(fā)個(gè)什么指令初始化之類的。
回復(fù)

使用道具 舉報(bào)

21#
ID:232366 發(fā)表于 2021-11-15 21:58 | 只看該作者
188610329 發(fā)表于 2021-11-14 22:07
你試試看極端值,比如最低,或者最高,是不是給你全0,全1,是的話,就說(shuō)明,通訊肯定是對(duì)的,如果不是的話 ...

非常感謝提出建議和思路我再細(xì)看一下芯片手冊(cè)。。。。。。!
回復(fù)

使用道具 舉報(bào)

22#
ID:1118271 發(fā)表于 2024-4-25 14:24 | 只看該作者
SHANWAZI 發(fā)表于 2021-11-15 21:58
非常感謝提出建議和思路我再細(xì)看一下芯片手冊(cè)。。。。。。!

你好,我也遇到這個(gè)問(wèn)題,不知道能否給一下后面您的進(jìn)一步探究結(jié)果
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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