找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5549|回復: 3
打印 上一主題 下一主題
收起左側

FM1208 CPU卡操作程序調試小結

[復制鏈接]
跳轉到指定樓層
樓主
ID:223631 發(fā)表于 2017-7-31 18:20 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

FM1702這款芯片的操作可以通過SPI串口,也可以通過并口。在我們的設計中,是通過SPI串口進行操作的。所以在硬件電路搭建好了之后,首先要做的是調試SPI接口。我們所用的控制芯片是STM32F103C8TL,其中集成了SPI接口,對其進行操作就是進行一些設置,然后讀寫緩沖區(qū),標志位,片選信號線。在程序中設置如下:

SCK,MISO,MOSI對應芯片上的引腳設為推挽復用,

RST,NSS對應的芯片上的引腳設為推挽輸出,

設置SPI端口:方向,為雙向全雙工;模式,主模式;數據大小,8bits;NSS為高時鐘電平為高;在NSS有效后第二個周期數據有效;發(fā)送或者接受的第1比特為8bits中的最高位;循環(huán)糾正碼為7。

ST芯片上的SPI端口設定好之后,就是進行SPI端口調試,這個模塊的調試,我們是費了一些周折的,先是直接連上FM1702芯片,發(fā)送數據并接收數據,結果總是令人沮喪,這是第一步,SPI口沒有調通,之后的操作都不能進行。后來改了一下,接上Flash來調試SPI端口,由于開發(fā)平臺是ST的一個開發(fā)板,把以前一個廢板子,上面有Flash的,通過飛線將對應端口連接起來,結果受到廢板子電路的影響,高低電平都無法穩(wěn)定得到,然后換了一個有Flash的廢板子,就可以了,這個大概是僥幸吧。

讓我覺得欣慰的是,在兩天內,我就完成了對AT45DB161這個Flash存儲器的讀寫操作的程序,當然是在借鑒別人的一些程序的基礎上。讓我有點納悶,并且有點出乎我的意料的是,SPI端口的讀操作,并不是我分析出來的那樣:

先讓NSS有效(低)并保持有效,然后發(fā)送一個地址命令(1byte),接著檢測接收緩沖器的標識位,有效以后讀取緩沖區(qū)的值,然后將NSS無效。這個流程是我分析出來的,但是這樣是不對的,因為這樣無法讀出數據,讀出來的數據也是不對的。

在我參考、學習了好幾個SPI操作程序之后,我發(fā)現(xiàn)了正確的讀操作流程,1,讓NSS有效(低)并保持有效;2,發(fā)送一個無效字節(jié)(DUMMY),3,檢測接收緩沖器的標示位,有效后讀取接收緩沖區(qū)的數據。4,讓NSS無效(高)。而正確的發(fā)送一個字節(jié)操作流程為1,讓NSS有效(低)并保持有效;2,發(fā)送一個命令或者數據;3,檢測接收緩沖器的標志位,有效后讀取數據(1byte);4,讓NSS無效(高)。其中讀操作的第二步,是為了給SPI端口提供時鐘,而寫操作的第3步好似多余,因為讀出的數據是無效數據。

不管怎樣,經過折騰,把SPI接口的操作調試通過了。緊接著做的工作就是調試FM1702的讀寫,參看了文檔之后,發(fā)送地址,數據,發(fā)送地址,接收數據,主要是對FM1702中的FIFO進行讀寫,對Command寄存器進行讀寫,以及對一些寄存器進行設置。

測試這些寄存器通過之后,寫好一個初始化FM1702的程序進行設置。設置好了以后,就要通過FM1702對卡片(FM1208)進行操作,1,尋卡;2,防沖突;3,選卡;這三步執(zhí)行成功就會選定一張卡接下來的操作就是針對這張卡的。在第2步中,會獲得卡片的序列號,這個序列號是生產卡片時就確定了的。

接著是Rats和PPS命令,這兩條命令通過之后就進入了MF,MF是默認的一個文件夾,將CPU卡內的64k空間當做一個文件夾便于管理操作。之后的操作就是建立文件夾(應用),然后建立文件,添加記錄等的操作。

在發(fā)送命令對卡進行操作時,有個問題然我很頭痛,直到最后才解決,那就是發(fā)送命令等待返回值,有時候是操作失敗,沒有成功,那么可以繼續(xù)發(fā)送,但是我并不知道怎樣去判斷該等待多長時間才去讀取返回值,在調試的過程中,(1)如果把它設為死循環(huán),只要沒有得到相應的相應,就一直發(fā)送,結果這樣很不好,假如在尋卡時失敗,或者發(fā)送命令有誤,那么程序無法跳出。(2)又試著把延遲設置得比較小,因為這樣可以讓系統(tǒng)反應快一點,有錯就重新來過,但是有些命令,(如創(chuàng)建文件,添加記錄)執(zhí)行正確之后,需要很長時間才能有返回值,還沒有到執(zhí)行結束,由于延遲不夠,就判定執(zhí)行失敗了,又重新發(fā)命令,結果是一直都操作失敗。后來我發(fā)現(xiàn),(3)可以通過檢測FM1702的一個寄存器(中斷請求寄存器)的值來判斷是否完成了接受返回值。不能進行的操作是,等待期間讀取FIFO的值,或者FIFO長度。這樣還是有(1)中的問題,當一開始沒有卡,而后來有卡時就沒有辦法檢測到,所以在(3)的基礎上添加一個延遲判別,到達一定延遲時間還沒有返回正確值就判定命令執(zhí)行失敗,再重新發(fā)送。這個問題在調試的過程中讓我吃盡苦頭,有時候都不知道是這個地方的問題,最后終于解決,心中也有那么一點的成就感。

還有一些問題,是在復旦微電子那邊的技術支持(唐工)的幫助下解決的,主要是后面建立錢包,管理錢包,充值,消費程序調試的時候,有一個問題,困擾了幾天,在調試初始化圈存命令時,總是返回69 85,使用條件不滿足,唐工幫我看了好久,排除了各種權限問題,還是不行,后來我仔細看文檔,發(fā)現(xiàn)其中說錢包文件的標識符要設為00 02,改過來之后就執(zhí)行成功了;還有一個問題也是讓我很困擾,在調試圈存命令時,總是返回6901,一開始,唐工告訴我要建立一個應用公共基本數據文件,并且往里面添加記錄,當我把這個完成(其實也不簡單,這個文件是線路保護的二進制文件,添加記錄也是一件麻煩的事情)之后,圈存命令返回值還是6901,后來在我都覺得沒有希望的時候,唐工幫我仔細分析了我的操作流程,發(fā)現(xiàn)問題就在初始化圈存之后,卡片的狀態(tài)發(fā)生了改變,我仔細檢查,發(fā)現(xiàn)有一個獲取隨機數的命令,改過來之后,調試成功了,心中又是一陣歡喜。就這樣,后面的消費指令也順利調試通過了。


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:224118 發(fā)表于 2017-8-2 15:28 | 只看該作者
你好,我現(xiàn)在編寫fm1702芯片,遇到了你所說的SPI沒調通,以下是我的讀操作,我也用此函數先發(fā)送一個無用字節(jié),也調不通,請你幫忙看看,謝謝
unsigned char  read_FM17XX_byte(unsigned char spi_addr)
{
        unsigned char i,m;
        FM_SCK=0;
        FM_NSS=0;
        FM_MISO=1;
        DELAY_US
        spi_addr<<=1; //低位置0
        spi_addr=0x80|spi_addr;        //高位置一 代表讀
    //發(fā)送地址
        for(i=0;i<8;i++)
        {
               
                if(spi_addr&0x80)
                {
                        FM_MOSI=1;
                }
                else
                {
                        FM_MOSI=0;       
                }
                DELAY_US
            FM_SCK=1;
                spi_addr<<=1;
                DELAY_US
                FM_SCK=0;               
        }
        m=00;
       
        DELAY_US
        DELAY_US
        for(i=0;i<8;i++)
        {       
                m<<=1;       
                if(FM_MISO==1)
                {
                        m=m|0x01;
                }
                FM_SCK=1;
                DELAY_US
                FM_SCK=0;
                DELAY_US
               
        }
        FM_NSS=1;
        FM_SCK=0;
        return m;
}
回復

使用道具 舉報

板凳
ID:148552 發(fā)表于 2019-2-22 16:04 | 只看該作者
樓主可以加個QQ交流下嗎?我也是做一卡通的
回復

使用道具 舉報

地板
ID:1082966 發(fā)表于 2023-6-9 10:47 | 只看該作者

樓主完成這個了嗎?最近也在弄這個,有資源共享嗎
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表