一区二区三区电影_国产伦精品一区二区三区视频免费_亚洲欧美国产精品va在线观看_国产精品一二三四

聯(lián)系我們 - 廣告服務(wù) - 聯(lián)系電話:
您的當(dāng)前位置: > 關(guān)注 > > 正文

快消息!PSAM部分的硬件設(shè)計 PSAM部分的硬件設(shè)計圖

來源:CSDN 時間:2023-01-06 08:23:00

1. PSAM部分的硬件設(shè)計

圖1


(資料圖)

CS 片選信號

SCK 時鐘信號

MISO 主設(shè)備的數(shù)據(jù)輸入、從設(shè)備的數(shù)據(jù)輸出腳

MOSI 主設(shè)備的數(shù)據(jù)輸出、從設(shè)備的數(shù)據(jù)輸入腳

2. PSAM部分軟件設(shè)計

圖2

(1) PSAM應(yīng)用

這部分只需要調(diào)用API函數(shù)即可。

(2) PSAM API

API的主要工作就是給M0上電、設(shè)置SPI讀寫模式、設(shè)置SPI讀寫的每字節(jié)的位數(shù)、SPI的工作頻率等。

(3) SPI驅(qū)動

接收到API設(shè)置SPI的參數(shù)后做相應(yīng)的工作。

(4) M0固件

和TDA8007的主要工作由M0固件完成,包括協(xié)議的等等。

3. 組件配置

kernelarcharmconfigsmsm8909-1gb-CB03-perf_defconfig配置文件,確保下面選項設(shè)置如下:

CONFIG_SPI=y

CONFIG_SPI_QUP=y

CONFIG_SPI_SPIDEV=m,后來給改為y

如果是user版本就采用此文件,如果是eng文件就改msm8909-1gb-CB03_defconfig文件。

4. 設(shè)備樹配置

PSAM部分設(shè)備樹節(jié)點的設(shè)置層次

圖3

其中綠色矩形框部分是PSAM部分需要修改。

4.1 kernelarcharmootdtsqcommsm8909-cb03.dtsi增加SPI2控制器設(shè)備節(jié)點

?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24aliases {/* smdtty devices */smd1= &smdtty_apps_fm;smd2= &smdtty_apps_riva_bt_acl;smd3= &smdtty_apps_riva_bt_cmd;smd5= &smdtty_apps_riva_ant_cmd;smd6= &smdtty_apps_riva_ant_data;smd7= &smdtty_data1;smd8= &smdtty_data4;smd11= &smdtty_data11;smd21= &smdtty_data21;smd36= &smdtty_loopback;sdhc1= &sdhc_1; /* SDC1 eMMC slot */sdhc2= &sdhc_2; /* SDC2 SD card slot *///spi0= &spi_0; /* SPI0 controller device */spi2 = &spi_2; /* SPI2 controller device */i2c5 = &i2c_5; /* I2c5 cntroller device *///i2c3= &i2c_3; /* I2C3 controller */i2c1= &i2c_1; /* I2C1 controller */i2c2= &i2c_2; /* I2C2 NFC qup2 device */i2c4= &i2c_4; /* I2C4 controller device */i2c6= &i2c_6; /* I2c6 cntroller device */};

增加spi2 = &spi_2; /*SPI2 controller device */,同時注釋掉i2c3 =&i2c_3;,且去掉msm8909-qrd-skue-cb03.dtsi文件下i2c_3相關(guān)的信息

增加SPI2控制器設(shè)備節(jié)點信息

?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24spi_2: spi@78b7000{ /* BLSP1 QUP3 */compatible =qcom,spi-qup-v2;#address-cells =<1>;#size-cells =<0>;reg-names =spi_physical, spi_bam_physical;reg =<0x78b70000x600>,<0x78840000x23000>;interrupt-names =spi_irq, spi_bam_irq;interrupts =<0970>,<02380>;spi-max-frequency =<19200000>;pinctrl-names =spi_default, spi_sleep;pinctrl-0=<&spi2_default spi2_cs0_active="">;pinctrl-1= <&spi2_sleep&spi2_cs0_sleep>;clocks = <&clock_gccclk_gcc_blsp1_ahb_clk>,<&clock_gccclk_gcc_blsp1_qup3_spi_apps_clk>;clock-names =iface_clk, core_clk;qcom,infinite-mode =<0>;qcom,use-bam;qcom,use-pinctrl;qcom,ver-reg-exists;qcom,bam-consumer-pipe-index =<8>;qcom,bam-producer-pipe-index =<9>;qcom,master-id =<86>;};

For latest detail please follow /kernel/Documentation/devicetree/bindings/spi/spi_qsd.txt

這里說明下SPI2的2指SPI控制器對應(yīng)的總線號,對應(yīng)spi_maste結(jié)構(gòu)體的成員bus_num。

4.2 kernelarcharmootdtsqcommsm8909-pinctrl-cb03.dtsi增加SP2控制器引腳控制設(shè)置。

Pin控制的文檔可參考/kernel/Documentation/devicetree/bindings/pinctrl/msm-pinctrl.txt

?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49spi2_active {/* MOSI, MISO, CLK */qcom,pins = <&gp0>, <&gp 1="">, <&gp 3="">;qcom,num-grp-pins =<3>;qcom,pin-func =<1>;label =spi2-active;/* active state */spi2_default:spi2_default {drive-strength=<12>; /* 12 MA */bias-disable =<0>; /* No PULL */};};spi2_suspend {/* MOSI, MISO, CLK */qcom,pins = <&gp0>, <&gp 1="">, <&gp 3="">;qcom,num-grp-pins =<3>;qcom,pin-func =<0>;label =spi2-suspend;/* suspended state */spi2_sleep: spi2_sleep{drive-strength=<2>; /* 2 MA */bias-pull-down; /* pull down */};};spi2_cs0_active {/* CS */qcom,pins = <&gp2>;qcom,num-grp-pins =<1>;qcom,pin-func =<1>;label =spi2-cs0-active;spi2_cs0_active:cs0_active {drive-strength=<2>;bias-disable =<0>;};};spi2_cs0_suspend {/* CS */qcom,pins = <&gp2>;qcom,num-grp-pins =<1>;qcom,pin-func =<0>;label =spi2-cs0-suspend;spi2_cs0_sleep:cs0_sleep {drive-strength=<2>;bias-disable =<0>;};};

4.3 kernelarcharmootdtsqcommsm8909-qrd-skue-cb03.dtsi增加SPI2控制器掛載的SPI從設(shè)備節(jié)點信息

?

1 2 3 4 5 6 7 8spi@78b7000{   spidev@0{compatible= nxp,lpc1114;//掛載的是NXP廠家的lpc1114設(shè)備reg=<0>;spi-max-frequency=<1000000>;qcom,psam_en_gpio= <&msm_gpio 230="">;};};

這里說明下spidev@0后面的0是指SPI采用哪個CS引腳選擇的SPI從設(shè)備,對應(yīng)struct spi_master結(jié)構(gòu)體成員num_chipselect。那為什么我們是用cs0呢。先來看我們用的SPI控制器對應(yīng)的引腳

圖4

這里CS_N的N為什么是0呢?再來看下圖:

圖5

我們可知BSP1~3都可以通過擴展的CS1、CS2和CS3來片選SPI從設(shè)備,當(dāng)然還有CS0,也就是說BSP1~3對應(yīng)的SPI0~SPI2控制器,每個都可以支持多達4個SPI從設(shè)備,BSP4~6只能掛接1個SPI從設(shè)備,只能通過CS0來片選。

5. 驅(qū)動代碼控制

5.1 PSAM_EN控制

新建PSAM電源控制的結(jié)構(gòu)體

?

1 2 3 4 5 6 7struct psam_control_data {/*system */structspi_device *client;/*dtsi */intpsam_en_gpio;};

在spidev_probe()函數(shù)中默認初始化PSAM_EN為低電平,控制代碼如下:

?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26staticbool parse_psam_control_dtsi(structdevice *dev, struct psam_control_data *psam_data){//enumof_gpio_flags dummy;structdevice_node *node = dev->of_node;intret;psam_data->psam_en_gpio= of_get_named_gpio_flags(node,qcom,psam_en_gpio,0, NULL);if(psam_data->psam_en_gpio < 0){returnERR_PTR(psam_data->psam_en_gpio);}else{ret= gpio_request(psam_data->psam_en_gpio, psam_en_gpio);if(ret < 0){pr_err(Failedto request psam_en_gpio, ERRNO:%d, ret);gotofree_gpio;}gpio_direction_output(psam_data->psam_en_gpio,0);}free_gpio:gpio_free(psam_data->psam_en_gpio);returntrue;}

在PSAM應(yīng)用程序打開的時候,應(yīng)用層通過ioctl(fd, SPI_IOC_SPI_IOC_ENABLE, &sam_enable)來控制上電,對應(yīng)調(diào)用spidev.c下的spidev_ioctl(),增加case

?

1 2 3 4 5 6 7caseSPI_IOC_SPI_IOC_ENABLE:retval= __get_user(tmp, (u8 __user *)arg);if(retval == 0) {psam_power_control(tmp);}break;

在spidev.h增加SPI_IOC_SPI_IOC_ENABLE定義如下: ?

1#define SPI_IOC_SPI_IOC_ENABLE _IOW(SPI_IOC_MAGIC, 5, __u32)

psam_power_control()函數(shù)的源代碼如下: ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22staticbool psam_power_control( bool on){intret;psam_control->psam_en_gpio= of_get_named_gpio_flags(psam_control->client->dev.of_node,qcom,psam_en_gpio,0, NULL);if(psam_control->psam_en_gpio < 0)returnERR_PTR(psam_control->psam_en_gpio);else{ret= gpio_request(psam_control->psam_en_gpio, psam_en_gpio);if(ret < 0){pr_err(Failedto request psam_en_gpio, ERRNO:%d, ret);gotofree_gpio;}gpio_direction_output(psam_control->psam_en_gpio,on);}free_gpio:gpio_free(psam_control->psam_en_gpio);returnret;}

5.2 SPI從設(shè)備節(jié)點屬性compatible要和spidev.c下的spidev_spi_driver保持一致

同時參考2.3部分

?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23staticconststruct of_device_idspidev_dt_ids[] = {//{.compatible = rohm,dh2228fv },{.compatible = nxp,lpc1114 },{},};MODULE_DEVICE_TABLE(of, spidev_dt_ids);staticstruct spi_driver spidev_spi_driver= {.driver= {.name=        spidev,.owner=       THIS_MODULE,.of_match_table= of_match_ptr(spidev_dt_ids),},.probe= spidev_probe,.remove=     spidev_remove,/*NOTE:  suspend/resume methods are notnecessary here.* We don"t do anything except pass therequests to/from* the underlying controller.  The refrigerator handles* most issues; the controller driver handlesthe rest.*/};

5.3 CPOL和CPHA極性設(shè)置

我們用CPOL表示時鐘信號的初始電平的狀態(tài),CPOL為0表示時鐘信號初始狀態(tài)為低電平,為1表示時鐘信號的初始電平是高電平。另外,我們用CPHA來表示在那個時鐘沿采樣數(shù)據(jù),CPHA為0表示在首個時鐘變化沿采樣數(shù)據(jù),而CPHA為1則表示要在第二個時鐘變化沿來采樣數(shù)據(jù)。內(nèi)核用CPOL和CPHA的組合來表示當(dāng)前SPI需要的工作模式:

CPOL=0,CPHA=1 模式0

CPOL=0,CPHA=1 模式1

CPOL=1,CPHA=0 模式2

CPOL=1,CPHA=1 模式3

我們這里SPI從設(shè)備CPOL和CPHA采用的是模式1,所以我們SPI控制器也采用模式1。

module_init(spidev_init);

spidev_init()相關(guān)代碼如下:

?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19if(busnum != -1&& chipselect !=-1) {structspi_board_info chip = {.modalias     = spidev,.mode           = spimode,.bus_num     = busnum,.chip_select  = chipselect,.max_speed_hz   = maxspeed,};structspi_master *master;master= spi_busnum_to_master(busnum);if(!master) {status= -ENODEV;gotoerror_busnum;}/*We create a virtual device that will sit on the bus */spi= spi_new_device(master, &chip);

5.4

6. SPI測試代碼

在kernelDocumentationspi文件夾下就是SPI測試程序,其中spidev_test.c是用于測試自發(fā)自收的。我在systemextras下新建spi文件夾,并把spidev_test.c拷貝到spi文件夾下,并創(chuàng)建一個Android.mk文件,內(nèi)容如下:

?

1 2 3 4 5 6 7LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := spidev_testLOCAL_SRC_FILES := spidev_test.cLOCAL_MODULE_TAGS := optionalinclude $(BUILD_EXECUTABLE)

然后進入此spi目錄下用mm命令編譯生成的可執(zhí)行文件spidev_test在out argetproductmsm8909symbolssystemin目錄下。然后我們可以通過adb push命令把此文件拷貝到設(shè)備某個目錄下用./spidev_test執(zhí)行,如果提示權(quán)限不夠,就用chmod 777 spidev_test命令。

用此程序可以測試spi設(shè)備驅(qū)動是否正常,但是否能夠正常驅(qū)動SPI從設(shè)備還需要根據(jù)具體的從設(shè)備來增加對應(yīng)的控制。

7. 遇到的問題及解決

7.1 /sys/class/spi_master下找不到spi2

把kernelarcharmootdtsqcommsm8909-cb03.dtsi的i2c3 = &i2c_3注釋掉就可以看到了

?

1 2 3 4 5 6 7 8 9 10 11aliases {…//spi0 = &spi_0; /* SPI0 controllerdevice */spi2= &spi_2; /* SPI0 controller device */i2c5 = &i2c_5; /* I2c5 cntroller device *///i2c3 = &i2c_3; /* I2C3 controller */i2c1= &i2c_1; /* I2C1 controller */i2c2= &i2c_2; /* I2C2 NFC qup2 device */i2c4= &i2c_4; /* I2C4 controller device */i2c6= &i2c_6; /* I2c6 cntroller device */};

7.2 /sys/class/spidev下看不到SPI2控制器下掛載的SPI從設(shè)備

(1) Spidev.c下修改

?

1 2 3 4 5staticconststruct of_device_idspidev_dt_ids[] = {//{.compatible = rohm,dh2228fv },{.compatible = nxp,lpc1114 },{},};

(2) kernelarcharmootdtsqcommsm8909-cb03.dtsi的spi_2: spi@78b7000節(jié)點下增加從設(shè)備節(jié)點

?

1 2 3 4 5 6 7 8spi@78b7000{   spidev@0{compatible= nxp,lpc1114;reg=<0>;spi-max-frequency=<1000000>;qcom,psam_en_gpio= <&msm_gpio 230="">;};};

只要這兩個地方的名字一樣就可以。

7.3 應(yīng)用層open()設(shè)備/dev/spidev2.0失敗

在systemcore ootdir init_CB03.rc增加下面的內(nèi)容來修改權(quán)限

?

1chmod 0666/dev/spidev2.0

7.4 應(yīng)用層用write()和read()測試自發(fā)自收失敗

用系統(tǒng)自帶的spidev_test采用的ioctl方式測試自發(fā)自收可以,但用write()寫返回值卻是0,正確的應(yīng)該是返回我們實際寫入的字節(jié)數(shù),目前原因不知道,相關(guān)的帖子:http://bbs.csdn.net/topics/391858635?page=1#post-400571674。

沒辦法我們PSAM的API層只能改用ioctl的方式就可以了。

7.5 SPI工作頻率過低

通過PSAM的API我設(shè)置SPI控制器工作的頻率為200kHZ,SPI控制器的spi_qsd提示頻率過低,改為1MHZ就可以了。

7.6 TDA8007給PSAM卡上電失敗

用我們實際的PSAM程序測試,根據(jù)調(diào)試信息可知選卡槽命令正常,但是給PSAM卡供5V電的時候一直沒有數(shù)據(jù)回來,后來查明是

圖6

把SW1的下拉改為上拉到3.3V就可以了。

責(zé)任編輯:

標(biāo)簽:

相關(guān)推薦:

精彩放送:

新聞聚焦
Top 一区二区三区电影_国产伦精品一区二区三区视频免费_亚洲欧美国产精品va在线观看_国产精品一二三四
国产一区日韩二区欧美三区| 欧美三区免费完整视频在线观看| 麻豆精品视频在线| 国语自产偷拍精品视频偷| 欧美一区二区精品在线| 国内精品亚洲| 欧美成人四级电影| aa国产精品| 国产精品一区免费在线观看| 久久久另类综合| 日韩亚洲国产欧美| 国产区日韩欧美| 欧美成熟视频| 欧美伊人精品成人久久综合97| 一色屋精品亚洲香蕉网站| 欧美久久一区| 久久精品视频在线观看| 99热免费精品| 韩日欧美一区二区| 欧美视频在线观看免费网址| 久久久精品久久久久| 99视频精品在线| 韩国自拍一区| 欧美午夜不卡视频| 免费不卡在线视频| 亚洲欧美中文日韩在线| 日韩一级片网址| 极品中文字幕一区| 国产精品剧情在线亚洲| 欧美成人国产一区二区| 久久精品国产清高在天天线 | 久久久久久久成人| 亚洲视频一区二区| 亚洲国产成人久久综合| 国产欧美一区二区精品婷婷| 欧美色网一区二区| 欧美精品1区| 免费一级欧美片在线观看| 欧美一区二区三区视频在线 | 中日韩高清电影网| 在线成人h网| 激情成人av| 国产综合色产在线精品| 国产精品色午夜在线观看| 欧美久久久久久| 欧美成人精品在线播放| 噜噜噜91成人网| 久久青草福利网站| 久久久久久亚洲精品中文字幕| 午夜精品一区二区在线观看 | 亚洲东热激情| 狠狠色综合网| 国产曰批免费观看久久久| 国产免费观看久久黄| 国产精品乱人伦中文| 欧美日韩亚洲另类| 欧美三级电影网| 欧美日韩午夜在线| 欧美日韩中文| 国产精品毛片在线| 国产精品视频一区二区三区| 国产精品夜夜夜| 国产欧美日韩在线观看| 国产精品捆绑调教| 国产日韩欧美不卡| 狠色狠色综合久久| 91久久久久久久久| 99视频精品免费观看| 中文亚洲欧美| 欧美亚洲一区二区在线观看| 欧美有码在线视频| 久久久久一区二区三区四区| 欧美成va人片在线观看| 欧美日本不卡视频| 国产精品青草综合久久久久99 | 欧美精品色一区二区三区| 欧美精品网站| 国产精品久久久久久久久久久久久久| 国产精品午夜久久| 精品成人国产在线观看男人呻吟| 亚洲激情亚洲| 亚洲一区二区网站| 久久久久久久综合色一本| 欧美成在线视频| 欧美视频一区二区三区…| 国产精品一区在线观看| 伊人成人在线视频| 亚洲视频在线一区观看| 久久精品日产第一区二区| 欧美国产免费| 国产欧美在线播放| 亚洲国产欧美一区二区三区久久 | 亚洲在线视频| 久久久97精品| 欧美午夜不卡视频| 亚洲成人在线| 亚洲欧美日韩国产一区二区| 榴莲视频成人在线观看| 国产精品高潮视频| 亚洲国产婷婷香蕉久久久久久99| 亚洲综合国产| 欧美另类一区二区三区| 国产一区二区激情| 一区二区日韩伦理片| 老牛国产精品一区的观看方式| 欧美天天在线| 亚洲日本中文字幕区| 久久成人人人人精品欧| 欧美日韩午夜在线| 亚洲成色777777女色窝| 欧美一区二区视频观看视频| 欧美日韩在线三级| 亚洲国产一区二区三区在线播| 羞羞色国产精品| 欧美午夜精品| a4yy欧美一区二区三区| 欧美大片在线观看| 在线播放中文字幕一区| 午夜天堂精品久久久久| 欧美天天在线| 一本色道综合亚洲| 欧美成人蜜桃| 亚洲高清免费| 久久久亚洲欧洲日产国码αv| 国产伦精品一区二区三区视频黑人 | 男同欧美伦乱| 国内精品伊人久久久久av一坑| 香蕉久久夜色| 国产日本欧美在线观看| 性色av一区二区三区| 国产精品第2页| 亚洲午夜精品久久久久久浪潮 | 国产亚洲午夜高清国产拍精品| 亚洲色图制服丝袜| 国产精品theporn| 亚洲一区二区在| 国产精品www色诱视频| 亚洲视频欧美在线| 国产精品jvid在线观看蜜臀| 在线亚洲激情| 国产精品一卡二| 久久精品国产99国产精品| 国产偷国产偷亚洲高清97cao| 欧美亚洲专区| 黄色欧美成人| 久久综合电影| 亚洲日韩成人| 欧美三级网址| 性欧美video另类hd性玩具| 国产午夜精品一区二区三区欧美| 欧美资源在线| 亚洲国产精品一区二区第四页av| 欧美波霸影院| 亚洲一区在线观看视频| 国产精品亚洲欧美| 久久日韩粉嫩一区二区三区| 亚洲国产高清在线| 欧美日韩中文精品| 欧美在线日韩| 91久久一区二区| 国产精品人人做人人爽| 久久亚洲精品欧美| 亚洲麻豆av| 国产又爽又黄的激情精品视频| 老牛国产精品一区的观看方式| 亚洲理论电影网| 国产三区二区一区久久| 欧美激情一区二区久久久| 亚洲欧美国内爽妇网| 伊人久久大香线蕉综合热线 | 亚洲高清一二三区| 欧美日韩亚洲91| 久久久精品网| 亚洲少妇诱惑| 亚洲国产精品成人| 国产欧美日韩不卡免费| 欧美激情四色| 久久国产精品久久国产精品| 99精品欧美| 在线欧美日韩精品| 国产视频亚洲| 国产精品v亚洲精品v日韩精品| 久久影院亚洲| 性欧美在线看片a免费观看| 亚洲精品久久久久| 精品福利电影| 国产精品一香蕉国产线看观看| 欧美第一黄色网| 久久久久久久一区二区三区| 亚洲一区二区三区高清不卡| 亚洲欧洲日本mm| 亚洲第一中文字幕在线观看| 国产网站欧美日韩免费精品在线观看| 欧美大秀在线观看| 久久中文字幕导航| 久久精选视频| 久久av老司机精品网站导航| 亚洲男女自偷自拍| 亚洲午夜电影| 一本大道av伊人久久综合|