亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 3996 | 回復(fù): 3
打印 上一主題 下一主題

SPI驅(qū)動(dòng)問(wèn)題,求各位大俠指點(diǎn) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2014-12-01 15:43 |只看該作者 |倒序?yàn)g覽
本帖最后由 vacdvacd 于 2014-12-01 15:48 編輯

最近要寫一個(gè)基于Linux的SPI子系統(tǒng)的驅(qū)動(dòng)。
我首先是先看了看其他的如MCP2515的驅(qū)動(dòng)、drivers/spi/spidev.c中的內(nèi)容以及AT25.c等。
現(xiàn)在是想要讀我外設(shè)上面的寄存器信息。
SPI總線上的數(shù)據(jù)格式如下:

數(shù)據(jù)在時(shí)鐘上升沿有效。
發(fā)送:0x22,0x00
返回:0x00,0x03
其中,0x22是slave設(shè)備上的寄存器地址,0x00代表本條發(fā)送指令結(jié)束.具體的時(shí)序如:




我使用的是6410板子,當(dāng)然控制器驅(qū)動(dòng)就直接用的是drivers/spi/spi_s3c.c
在mach-xxx中添加了我的spi_board_info信息,
現(xiàn)在init的時(shí)候注冊(cè)spi驅(qū)動(dòng)核心,運(yùn)行probe的時(shí)候初始化一些數(shù)據(jù)結(jié)構(gòu)成員,設(shè)備節(jié)點(diǎn)文件也創(chuàng)建完成。


但是現(xiàn)在我無(wú)論是直接使用spi_async()來(lái)進(jìn)行數(shù)據(jù)同步,還是使用spi_write_then_read()來(lái)進(jìn)行數(shù)據(jù)同步,都是讀不出我想要的數(shù)據(jù),我測(cè)試的方法就是發(fā)送0x22,0x00,然后讀數(shù)據(jù),循環(huán)進(jìn)行試驗(yàn),但是就是讀不出來(lái)正確的數(shù)據(jù)(通過(guò)示波器測(cè)量,確定返回?cái)?shù)據(jù)波形沒(méi)有問(wèn)題,和我畫的時(shí)序圖吻合),讀出的數(shù)據(jù)很奇怪,而當(dāng)我把MOSI接到GND也確實(shí)讀的全是0,我很奇怪,就把DMA和SPI核心的debug打印打開了,如下:


[21474620.530000] s3c2410_dma_config: chan=33, xfer_unit=1, dcon=00000000
[21474620.530000] s3c2410_dma_config: Initial dcon is 00000000
[21474620.535000] s3c2410_dma_config: New dcon is 00000000
[21474620.540000] s3c2410_dma_config: DMA Channel control :  00000000
[21474620.545000] s3c2410_dma_config: dcon now 89000000
[21474620.550000] s3c2410_dma_enqueue: id=cf1e2940, data=5f300000, size=2
[21474620.555000] s3c2410_dma_enqueue: new buffer cf318000
[21474620.560000] s3c2410_dma_enqueue: buffer cf318000 queued onto empty channel
[21474620.560000] s3c_dma_waitforload channel number : 0
[21474620.575000] s3c2410_dma_config: chan=34, xfer_unit=1, dcon=00000000
[21474620.580000] s3c2410_dma_config: Initial dcon is 00000000
[21474620.585000] s3c2410_dma_config: New dcon is 00000000
[21474620.590000] s3c2410_dma_config: DMA Channel control :  00000000
[21474620.600000] s3c2410_dma_config: dcon now 86000000
[21474620.605000] s3c2410_dma_enqueue: id=cf1e2940, data=5f2fc000, size=2
[21474620.610000] s3c2410_dma_enqueue: new buffer cf318040
[21474620.615000] s3c2410_dma_enqueue: buffer cf318040 queued onto empty channel
[21474620.615000] s3c_start_dma: channel number=1, index=1
[21474620.615000] s3c_chan_loadbuffer: loading buffer cf318040 (0x5f2fc000,0x000002)
[21474620.615000] s3c_dma_loadbuffer: DMA control0 - 86000000
[21474620.615000] s3c_dma_loadbuffer: DMA control1 - 00000002
[21474620.615000] s3c_dma_start:wrote 00008b01 to S3C_DMAC_CxCONFIGURATION.
[21474620.650000] # s3c_dma_irq: TC status : 0x2
[21474620.650000] # DMA Controller 0: requestor 1
[21474620.650000] # DMA channel number : 1, index : 1
[21474620.650000] callback_fn will be called=c02585c4, buf=cf318040, id=cf1e2940, size=2, result=0
[21474620.650000] DMA CH 1: s3c_dma_lastxfer: load_state 0
[21474620.650000] DMA CH 1: s3c_dma_lastxfer: load_state : S3C2_DMALOAD_NONE0
[21474620.650000] # DMA CH 1(index:1): end of transfer, stopping channel (-43166)
[21474620.650000] s3c_dma_dostop: DMA Channel No : 1
[21474620.650000] s3c_dma_dostop: S3C_DMAC_CxCONFIGURATION : 00048b00
[21474620.650000] # s3c_dma_irq: TC status : 0x0
[21474620.710000] # s3c_dma_irq: TC status : 0x1
[21474620.710000] # DMA Controller 0: requestor 0
[21474620.710000] # DMA channel number : 0, index : 0
[21474620.710000] callback_fn will be called=c025861c, buf=cf318000, id=cf1e2940, size=2, result=0
[21474620.710000] DmaRx-2 [RX-OK]s3c_chan_loadbuffer: loading buffer cf318000 (0x5f300000,0x000002)
[21474620.710000] s3c_dma_loadbuffer: DMA control0 - 89000000
[21474620.710000] s3c_dma_loadbuffer: DMA control1 - 00000002
[21474620.710000] # s3c_dma_irq: TC status : 0x0
[21474620.755000] [    read_reg: 237] Read Data[0]=0x0
[21474620.760000] [    read_reg: 237] Read Data[1]=0x0
[21474620.765000] [    read_reg: 237] Read Data[2]=0x0
[21474620.770000]



而我read部分的主要代碼如下:(chip-->tx_buffer中是我發(fā)送的數(shù)據(jù)0x22,0x00,而chip->rx_buffer用于接收數(shù)據(jù))
        DECLARE_COMPLETION_ONSTACK(done);
        struct spi_transfer t = {
                .tx_buf = chip->tx_buffer,
                .rx_buf = chip->rx_buffer,
                .len        = len+1,
                .delay_usecs = 1000,
                .bits_per_word = 8,
                .cs_change = 0,
        };
        struct spi_message m;
        spi_message_init(&m);
        spi_message_add_tail(&t, &m);
        m.complete        = xxx_complete;
        m.context = &done;

        spin_lock_irq(chip->spin_lock);
        ret = spi_async(spi, &m);
        spin_unlock_irq(chip->spin_lock);

        if(ret == 0){
                wait_for_completion(&done);
                ret = m.status;
                if(ret == 0){
                        ret = m.actual_length;
                }
        }       
       
        if (ret < 0) {
                printk("[%20s:%4d] ERROR:sp_saync Failed\n",__FUNCTION__,__LINE__);
        }else{
                for(i=0;i<ret+1;i++){
                        printk("[%20s:%4d] Read Data[%d]=0x%x\n",
                                        __FUNCTION__, __LINE__, i, chip->rx_buffer);               
                }
        }       




目前spi驅(qū)動(dòng)核心的機(jī)制應(yīng)該是將我發(fā)送的數(shù)據(jù)add到工作隊(duì)列中去發(fā)送,而工作隊(duì)列的work處理函數(shù)應(yīng)該是是采用的DMA+中斷的方式,請(qǐng)問(wèn)我現(xiàn)在接收的數(shù)據(jù)出現(xiàn)問(wèn)題,有可能是什么方面的問(wèn)題呢??我是菜鳥一個(gè),希望各位大俠點(diǎn)撥一下,不甚感激。!




論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2015-03-14 23:51 |只看該作者
你怎么知道是采用dma和中斷工作的,反正210上的代碼是查詢方式,還有請(qǐng)你做下spi的環(huán)回測(cè)試,out接in測(cè)試下了,還有建議你spi時(shí)鐘不要太高

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2015-03-30 12:20 |只看該作者
時(shí)鐘首先要設(shè)對(duì),驅(qū)動(dòng)層還可能要選擇是8個(gè)比特還是24比特(填充字節(jié))
另外就是CPHA,CPOL 可能要設(shè)定,就是SPI的極性與相位

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2015-04-06 11:28 |只看該作者
首先看下基本功能能不能實(shí)現(xiàn):時(shí)鐘高低電平對(duì)不對(duì),時(shí)序?qū)Σ粚?duì),然后就是聯(lián)調(diào)。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP