导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页
    1. 主页
    2. lztmfx
    3. 最佳
    L
    • 资料
    • 关注 0
    • 粉丝 2
    • 我的积分 1489
    • 主题 9
    • 帖子 26
    • 最佳 4
    • 群组 0

    lztmfx 发布的最佳帖子

    • 回复: Tina linux用屏幕转换芯片时I2C初始化问题

      @lztmfx 在 Tina linux用屏幕转换芯片时I2C初始化问题 中说:

      用上面的方法二报错是其他原因报的错,排查后不报错了,不过I2C还是通讯不上

      GPIO模拟I2C调通了,贴下主要部分:

      #define I2C_SCL  204 //PG12
      #define I2C_SDA  205 //PG13
      
      #define I2C_SCL_HIGH() (gpio_set_value(I2C_SCL, 1))
      #define I2C_SCL_LOW()  (gpio_set_value(I2C_SCL, 0))
      #define I2C_SDA_HIGH() gpio_direction_input(I2C_SDA) // 释放SDA(外部上拉拉高)
      #define I2C_SDA_LOW()  gpio_direction_output(I2C_SDA, 0)
      #define I2C_SDA_READ() gpio_get_value(I2C_SDA)
      
      static void i2c_start(void)
      {
          I2C_SDA_HIGH();
          I2C_SCL_HIGH();
      	udelay(5);
          I2C_SDA_LOW();
      	udelay(5);
          I2C_SCL_LOW();
      }
      
      static void i2c_stop(void)
      {
          I2C_SDA_LOW();
          I2C_SCL_HIGH();
      	udelay(5);
          I2C_SDA_HIGH();
      	udelay(5);
      }
      

      注意使用完GPIO后要释放掉,否则后面用到这两个IO的驱动就要报错了,因为这两个IO是真正的I2C PIN,后面I2C驱动用得到,我这个案例就是驱动需要I2C初始化,但是LCD驱动在I2C驱动之前加载,在LCD驱动里面用不了硬件I2C的功能,查了资料,如果从调整驱动加载顺序的思路入手,能查到的方法要么不实际要么没有任何效果。不能让I2C在LCD前加载那就只能GPIO模拟I2C了,参考ST7789V GPIO模拟SPI看着不可行,实际没有测试,因为模拟SPI的GPIO可以不切换方向,而I2C SDA在ACK时需要切换输出为输入,在设备树定义gpio_x的方法不知道怎么在驱动切换GPIO方向,最终使用gpio_request()的方法申请GPIO来做

      发布在 Linux
      L
      lztmfx
    • Tian的设备树大概的加载逻辑是什么?

      回复: 请问sys_config.fex与board.dts是什么关系

      看打包流程设备树最终应该是打包成了sunxi.fex,然后最后是合并到sys_partition.fex描述的boot分区吗?看uboot感觉又是放在FAT分区,有点理不清逻辑了,和uboot defconfig的这几个参数有关吗?

      CONFIG_SUNXI_NECESSARY_REPLACE_FDT=y
      CONFIG_RESERVE_FDT_SIZE=0x20000
      CONFIG_SYS_TEXT_BASE=0x43000000
      CONFIG_SUNXI_FDT_ADDR=0x41800000
      

      我想打包多份设备树在这个设备树分区里面,根据其他条件选择加载哪一份设备树

      发布在 V Series
      L
      lztmfx
    • 回复: T113 切换存储,nand flash切换到SD卡启动,挂载文件系统报错

      @shz18877605430 在 T113 切换存储,nand flash切换到SD卡启动,挂载文件系统报错 中说:

      rootfstype=squashfs

      rootfstype=ext4

      发布在 MR Series
      L
      lztmfx
    • Tina linux用屏幕转换芯片时I2C初始化问题

      T113S3使用NCS8801 LVDS转EDP芯片,需要LCD驱动里面通过I2C初始化NCS8801,但是实际测试发现,tina linux的i2c晚于disp驱动加载,这样disp驱动里面获取不到有效的i2c适配器。有什么方法让i2c在disp前加载?另外看别的帖子说不建议在disp里面用硬件i2c初始化,推荐用GPIO模拟,看了SDK里面ST7789V也是用GPIO模拟SPI,但是SPI write的时候,引脚的输入输出是固定的,不用切换引脚状态,但是I2C的SDA引脚在发送完数据后需要切换为input模式来接收ACK信号的,这样如果用lcd设备树里面的这种方式是不行的吧?这个还可以在disp驱动里面通过代码切换lcd_gpio_X的参数吗?如输入改为输出。

      lcd_gpio_0 = <&pio PG 12 1 0 3 0>;
      lcd_gpio_1 = <&pio PG 13 1 0 3 0>;
      

      如果直接在disp驱动使用下面这种方式:

      #define I2C_SCL  204
      #define I2C_SDA  205
      #define I2C_SCL_LOW()  gpio_set_value(I2C_SCL, 0)
      #define I2C_SDA_HIGH() gpio_direction_output(I2C_SDA, 1)
      

      开机会有一堆报错

      [    0.650948] 8<--- cut here ---
      [    0.650952] Unable to handle kernel NULL pointer dereference at virtual address 00000000
      [    0.650960] pgd = (ptrval)
      [    0.658090] uart3: ttyS3 at MMIO 0x2500c00 (irq = 35, base_baud = 1500000) is a SUNXI
      ▒▒  0.660901] [00000000] *pgd=00000000
      [    0.669008] sw_console_setup()1807 - console setup baud 115200 parity n bits 8, flow n
      [    0.671684] Internal error: Oops: 5 [#1] PREEMPT SMP ARM
      [    0.696238] Modules linked in:
      [    0.696238] Modules linked in:
      [    0.696249] CPU: 0 PID: 21 Comm: kworker/0:1 Not tainted 5.4.61 #159
      [    0.696249] CPU: 0 PID: 21 Comm: kworker/0:1 Not tainted 5.4.61 #159
      [    0.696256] Hardware name: Generic DT based system
      [    0.696256] Hardware name: Generic DT based system
      [    0.702736] printk: console [ttyS3] enabled
      [    0.702736] printk: console [ttyS3] enabled
      [    0.716144] Workqueue: events start_work
      [    0.716144] Workqueue: events start_work
      [    0.716154] PC is at LCD_panel_init+0x44/0x13c
      [    0.716154] PC is at LCD_panel_init+0x44/0x13c
      [    0.716162] LR is at LCD_panel_init+0x40/0x13c
      [    0.716162] LR is at LCD_panel_init+0x40/0x13c
      [    0.726281] printk: bootconsole [earlycon0] disabled
      [    0.726281] printk: bootconsole [earlycon0] disabled
      [    0.735110] pc : [<c03962cc>]    lr : [<c03962c8>]    psr: 60000013
      [    0.735110] pc : [<c03962cc>]    lr : [<c03962c8>]    psr: 60000013
      [    0.735114] sp : c714de20  ip : 00000000  fp : 00000000
      [    0.735114] sp : c714de20  ip : 00000000  fp : 00000000
      [    0.735117] r10: 00000001  r9 : 00000000  r8 : c0b1bb66
      [    0.735117] r10: 00000001  r9 : 00000000  r8 : c0b1bb66
      [    0.735124] r7 : c0b1bb50  r6 : 00000000  r5 : 0000000b  r4 : c714c000
      [    0.735124] r7 : c0b1bb50  r6 : 00000000  r5 : 0000000b  r4 : c714c000
      [    0.821770] r3 : 50ca96b2  r2 : 50ca96b2  r1 : 06c7e000  r0 : 00000026
      [    0.821776] Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
      [    0.821783] Control: 10c5387d  Table: 4000406a  DAC: 00000051
      [    0.829589] sun8iw20-pinctrl 2000000.pinctrl: 2000000.pinctrl supply vcc-pb not found, using dummy regulator
      [    0.837001] Process kworker/0:1 (pid: 21, stack limit = 0x(ptrval))
      [    0.837006] Stack: (0xc714de20 to 0xc714e000)
      [    0.837017] de20: 00000000 50ca96b2 c730fa00 c7391000 c7390000 00000001 c0c5d028 c0373c88
      [    0.837032] de40: c08272ba c730fa00 c714de98 c07248e0 00000000 00000000 00000000 c036dcf4
      [    0.843742] uart uart4: uart4 supply uart not found, using dummy regulator
      [    0.854390] de60: 00000000 00000000 00020002 c714de6c c714de6c 50ca96b2 c7070c00 c06ea2ac
      [    0.854399] de80: c714c000 00000001 00000000 00000000 c0c596e8 c036df5c 00000001 00000000
      [    0.854407] dea0: 00000000 00000000 00000004 00000000 00000002 00000002 00000000 00000008
      [    0.854416] dec0: 00000000 50ca96b2 00000000 c714c000 c0c59350 00000002 c0c596e8 c0369d10
      [    0.861637] uart4: ttyS4 at MMIO 0x2501000 (irq = 36, base_baud = 1500000) is a SUNXI
      [    0.866247] dee0: 00000001 00000000 00000000 00000000 00000000 00000000 00000000 00000000
      [    0.866256] df00: 00000000 00000000 00000000 50ca96b2 00000000 c0c591e0 00000001 c0369e28
      [    0.866269] df20: c7040100 c76b6880 c0c594b8 c76b9900 00000000 00000000 c0c594bc c012f0ac
      [    0.876002] uart uart5: uart5 supply uart not found, using dummy regulator
      [    0.884498] df40: c7040100 c0c594b8 c7040100 c7040114 c76b6880 c714c000 c76b6898 c0b02d00
      [    0.884508] df60: c0b0b27c c012f6d0 00000000 c701e880 c714c000 c701e840 c7040100 c012f49c
      [    0.884517] df80: c704bec4 c701e89c 00000000 c0133f24 c701e840 c0133e04 00000000 00000000
      [    0.884527] dfa0: 00000000 00000000 00000000 c01010e8 00000000 00000000 00000000 00000000
      [    0.892457] uart5: ttyS5 at MMIO 0x2501400 (irq = 37, base_baud = 1500000) is a SUNXI
      [    0.901302] dfc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
      [    0.901310] dfe0: 00000000 00000000 00000000 00000000 00000013 00000000 00000000 00000000
      [    0.901333] [<c03962cc>] (LCD_panel_init) from [<c0373c88>] (disp_lcd_enable+0x2a4/0x2e0)
      [    0.901349] [<c0373c88>] (disp_lcd_enable) from [<c036dcf4>] (disp_device_attached_and_enable+0x140/0x260)
      [    0.911201] misc dump reg init
      [    0.919574] [<c036dcf4>] (disp_device_attached_and_enable) from [<c036df5c>] (bsp_disp_device_switch+0x8c/0xec)
      [    0.919586] [<c036df5c>] (bsp_disp_device_switch) from [<c0369d10>] (disp_device_set_config+0xd8/0x100)
      [    0.919597] [<c0369d10>] (disp_device_set_config) from [<c0369e28>] (start_work+0xf0/0x174)
      [    0.919610] [<c0369e28>] (start_work) from [<c012f0ac>] (process_one_work+0x144/0x20c)
      [    0.919626] [<c012f0ac>] (process_one_work) from [<c012f6d0>] (worker_thread+0x234/0x2d8)
      [    1.108057] [<c012f6d0>] (worker_thread) from [<c0133f24>] (kthread+0x120/0x12c)
      [    1.116309] [<c0133f24>] (kthread) from [<c01010e8>] (ret_from_fork+0x14/0x2c)
      [    1.124361] Exception stack(0xc714dfb0 to 0xc714dff8)
      [    1.129992] dfa0:                                     00000000 00000000 00000000 00000000
      [    1.139112] dfc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
      [    1.148231] dfe0: 00000000 00000000 00000000 00000000 00000013 00000000
      [    1.155610] Code: e2878016 e5cd3003 ebf6fd7c e3a06000 (e5963000)
      [    1.162481] ---[ end trace a3d10cdfd74119e3 ]---
      
      

      最后就是官方LCD调试PDF文档里面提到过SPI,I2C初始化的方式,是通过读取设备树信息probe设备的方式,那理论上这种也是需要i2c在disp之前加载吧,而且他T113S3的设备树貌似无法匹配手册上的方法。

      发布在 Linux
      L
      lztmfx
    • 1 / 1