您尚未登录。

楼主 # 2024-11-29 13:40:53

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,378
积分: 1343.5

t113s3 tina2.1,想设置PE13位i2c2引脚,总是提示被占用,但设备树里没看到占用。

开机信息里相关信息如下:

[    2.323168] sunxi-i2c sunxi-i2c1: sunxi-i2c1 supply twi not found, using dummy regulator
[    2.333103] sunxi-i2c sunxi-i2c1: probe success     
[    2.338516] sun8iw20-pinctrl 2000000.pinctrl: pin PE13 already requested by 2000000.pinctrl:141; cannot claim for 2502800
[    2.351237] sun8iw20-pinctrl 2000000.pinctrl: pin-141 (2502800.twi) status -22
[    2.359364] sun8iw20-pinctrl 2000000.pinctrl: could not request pin 141 (PE13) from group PE13  on device 2000000.pinctrl
[    2.371678] sunxi-i2c 2502800.twi: Error applying setting, reverse things back
[    2.379819] sunxi-i2c: probe of 2502800.twi failed with error -22
[    2.388118] sun8iw20-pinctrl 2000000.pinctrl: 2000000.pinctrl supply vcc-pb not found, using dummy regulator
[    2.400490] get ehci0-controller wakeup-source is fail.

内核设备树相关如下:

&pio {
        twi2_pins_a: twi2@0 {
                pins = "PE12", "PE13";
                function = "twi2";
                muxsel = <2>;
                drive-strength = <10>;
        };
 
       twi2_pins_b: twi2@1 {
               pins = "PE12", "PE13";
               function = "gpio_in";
       };
};

&twi2 {
        clock-frequency = <400000>;
        pinctrl-0 = <&twi2_pins_a>;
        /* pinctrl-1 = <&twi2_pins_b>; */
        pinctrl-names = "default", "sleep";
        /* dmas = <&dma 45>, <&dma 45>; */
        /* dma-names = "tx", "rx"; */
        status = "okay";

        adxl345: gpio@53 {
                compatible = "allwinner, adxl345_i2c";
                reg = <0x53>;
                status = "okay";
        };
};

将twi2_pins引脚改为PG14,PG15,能显示出i2c2设备。

请教,这是哪里设置错了?

附件是设备树文件。
board.txt
sun8iw20p1.txt

最近编辑记录 Gentlepig (2024-11-29 17:29:54)

离线

楼主 #1 2024-11-29 15:32:21

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,378
积分: 1343.5

Re: t113s3 tina2.1,想设置PE13位i2c2引脚,总是提示被占用,但设备树里没看到占用。

还有个问题:
按这个教程,我在/etc/init.d/目录下加了个S99qtapp,给予了执行权限,添加了如下内容。

#!/bin/sh
#
# Start Qt app
#

start() {
    printf "Start qt app ..."
    /home/app 1
}

stop() {
    printf "Stopping qt app ..."
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart|reload)
        stop
        start
        ;;
    *)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
esac

exit $?

写了个简单应用,qDebug打印了个"hello"。可启动后,调试串口没看到有打印,手动执行倒是能看到。

离线

#2 2024-12-01 21:29:46

bestikun
会员
注册时间: 2024-12-01
已发帖子: 1
积分: 1

Re: t113s3 tina2.1,想设置PE13位i2c2引脚,总是提示被占用,但设备树里没看到占用。

bt: bt@0 {
            compatible    = "allwinner,sunxi-bt";
            clock-names = "32k-fanout1";
            clocks = <&ccu CLK_FANOUT1_OUT>;
            /*bt_power_num = <0x01>;*/
            /*bt_power      = "axp803-dldo1";*/
            /*bt_io_regulator = "axp803-dldo1";*/
            /*bt_io_vol = <3300000>;*/
            /*bt_power_vol = <330000>;*/
            bt_rst_n      = <&pio PE 13 GPIO_ACTIVE_LOW>;
            status        = "disabled";
        };
是不是这里占用了

离线

楼主 #3 2024-12-02 08:34:26

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,378
积分: 1343.5

Re: t113s3 tina2.1,想设置PE13位i2c2引脚,总是提示被占用,但设备树里没看到占用。

@bestikun
还真是,感谢。
把这个bt的引脚注释掉后,i2c2出现了。
之前只搜了PE13,没想到中间加个空格也不影响,对设备树语法还是不熟悉。

---------------------------------------------------

            /* bt_rst_n      = <&pio PE 13 GPIO_ACTIVE_LOW>; */

仔细想了想,这不是设备树的pio写法。PE 13本来就是两个参数。

注释了这句或者改为其他IO后,i2c2可以成功创建了,但是adb功能有没了。
发现设备树里usb0有这句:

   /* usb_id_gpio = <&pio PE 12 GPIO_ACTIVE_HIGH>; */

和i2c2管脚也冲突了。
注释掉后正常了。
那么,usb id可以不用?

最近编辑记录 Gentlepig (2024-12-02 10:27:13)

离线

楼主 #4 2024-12-02 16:47:10

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,378
积分: 1343.5

Re: t113s3 tina2.1,想设置PE13位i2c2引脚,总是提示被占用,但设备树里没看到占用。

想接个中景园的1.14寸lcd屏幕,使用的是st7789v芯片,内核驱动里有个st7789v驱动,是用的软件模拟spi控制屏幕的,默认是240*240的。
直接用,在设备树里修改了分辨率和用到的gpio,结果背光亮,屏幕无显示。

中景园例程给的是单片机工程,比对了下初始化时发送的命令,修改st7789v.c里的初始化部分,改成发一样的命令,结果屏幕还是黑的。

单片机工程里用到了dc引脚,spi发送数据是8bit.st7789v.c里没用到dc管脚,发送9bit数据,第一bit表示命令或数据。按单片机工程修改为使用dc引脚,发送8bit数据,屏幕终于出现雪花点了,但是仍不正常。

看网上教程,执行 cat /dev/fb0 > screensnap,然后将screensnap传到Pc上以二进制方式查看:

$ ls -al
-rw-r--r-- 1 any any 129600 12月  2 16:33 screensnap

$ hexdump screensnap
0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
001fa40

看软件模拟Spi发送数据时,每bit之间没有延迟,手动加了个延时,结果还是雪花点。

---------------------------------------------------------------------------------------

去掉延时。按找单片机例程,在st7789.c屏幕初始化的末尾,加了段区域填充的语句,结果屏幕初始化后,可以看到填充的句型,虽然分成了两条...
这么说,屏幕初始化其实是成功了。但是为何colorbar运行无反映?qt程序运行也无反映?

------------------------------------------------------------------------------------------

我是按单片机例程里填充区域写了几句:
初始化后,填充一小块矩形;

    LCD_Address_Set(0, 0, 29, 29);
    1     for (i = 0; i < 30; i++)
    2     {
    3         for (j = 0; j < 30; j++)
    4         {
    5             st7789v_spi_write_data(0xFF);
    6             st7789v_spi_write_data(0xFF);
    7         }
    8     }

设置填充区域:

static void LCD_Address_Set(u16 x1, u16 y1, u16 x2, u16 y2)
    1 {
    2     st7789v_spi_write_cmd(0x2a);
    3     st7789v_spi_write_data(0x00);
    4     st7789v_spi_write_data(x1+52);
    5     st7789v_spi_write_data(0x00);
    6     st7789v_spi_write_data(x2+52);
    7     st7789v_spi_write_cmd(0x2b);
    8     st7789v_spi_write_data(0x00);
    9     st7789v_spi_write_data(y1+40);
   10     st7789v_spi_write_data(0x00);
   11     st7789v_spi_write_data(y2+40);
   12     st7789v_spi_write_cmd(0x2c);
   13 }

这样,初始化后,屏幕确实可以刷出个白色矩形区域来。

但有个疑问:

struct __lcd_panel st7789v_panel = {
    1     /* panel driver name, must mach the name of lcd_drv_name in sys_config.fex
    2        */
    3     .name = "st7789v",
    4     .func = {
    5         .cfg_panel_info = LCD_cfg_panel_info,
    6         .cfg_open_flow = LCD_open_flow,
    7         .cfg_close_flow = LCD_close_flow,
    8         .lcd_user_defined_func = LCD_user_defined_func,
    9         },
   10 };

该驱动函数为上层函数其实只提供了这4个函数,user这个函数直接返回0。open函数里执行了屏幕初始化操作。
按单片机例程,无论画线还是画块,都是要先设置起始坐标的,也即是要发送0x2a, 0x2b, 0x2c这三组命令,但是我没看到有这些操作。

最近编辑记录 Gentlepig (2024-12-03 15:25:12)

离线

楼主 #5 2024-12-04 12:39:10

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,378
积分: 1343.5

Re: t113s3 tina2.1,想设置PE13位i2c2引脚,总是提示被占用,但设备树里没看到占用。

想照着tina spi lcd文档建个驱动,结果硬件spi没输出。此过程修改了设备树和内核配置。
又想着改回去吧,仍选择fb pannel里的st7789v驱动,设备树也改回选这个,结果编译烧录后,屏上连雪花点都没了。示波器测量软件spi的管脚,sclk, sda, dc, cs,都有信号。
执行cat /dev/fb0,结果输出一堆信息然后就不走了。我记得之前是没信息的。

root@TinaLinux:/# cat /dev/fb0                                                                              
[   24.384531] disp_al_manager_apply ouput_type:1                                                           
[   24.389632] genirq: Flags mismatch irq 51. 00000004 (dispaly) vs. 00000004 (dispaly)                     
[   24.398393] [DISP] lcd_clk_config,line:774:                                                              
[   24.398404] disp 0, clk: pll(114000000),clk(114000000),dclk(19000000) dsi_rate(114000000)                
[   24.398404]      clk real:pll(288000000),clk(288000000),dclk(24000000) dsi_rate(0)                       
[   24.420776] [DISP] disp_sys_pwm_config,line:509:                                                         
[   24.420778] disp_sys_pwm_Config, handle is NULL!                                                         
[   24.431137] [DISP] disp_sys_pwm_set_polarity,line:528:                                                   
[   24.431140] disp_sys_pwm_Set_Polarity, handle is NULL!                                                   
[   32.532512] usb1-vbus: disabling          

我看信息里又disp_sys_pwm_request,然后就把设备树里lcd_pwm_used = <1>这句给注释了,结果没效果,改为<0>后,才消失一行信息。

---------------------------------------------

索性把内核驱动里的pwm关掉,变成这样了:

oot@TinaLinux:/# cat /dev/fb0                                                                                  
[   15.285819] disp_al_manager_apply ouput_type:1                                                               
[   15.291006] genirq: Flags mismatch irq 51. 00000004 (dispaly) vs. 00000004 (dispaly)                         
[   15.299774] [DISP] lcd_clk_config,line:774:                                                                  
[   15.299785] disp 0, clk: pll(114000000),clk(114000000),dclk(19000000) dsi_rate(114000000)                    
[   15.299785]      clk real:pll(288000000),clk(288000000),dclk(24000000) dsi_rate(0) 

Flags mismatch irq 51. 00000004 (dispaly) vs. 00000004 (dispaly) 
这咋还有中断了呢?

最近编辑记录 Gentlepig (2024-12-04 12:52:49)

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn