导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页
    1. 主页
    2. kashine
    K
    • 资料
    • 关注 0
    • 粉丝 0
    • 我的积分 977
    • 主题 9
    • 帖子 20
    • 最佳 0
    • 群组 0

    kashineLV 4

    @kashine

    977
    积分
    0
    声望
    1
    资料浏览
    20
    帖子
    0
    粉丝
    0
    关注
    注册时间 最后登录

    kashine 取消关注 关注

    kashine 发布的最新帖子

    • F1C200s使用去掉Flash的ESP12F做无线网卡?

      F1C200s作为主机,8266作为SPI从机,注册SPI从设备的时候,进入probe函数,如下,调用了如下函数:

      err = sif_spi_protocol_init(spi); //发送一堆指令
      

      probe函数:

      static int esp_spi_probe(struct spi_device *spi) 
      {
          int err;
          struct esp_pub *epub;
          struct esp_spi_ctrl *sctrl;
          static int dt_get_n=1;
          if(dt_get_n > 0 ) {
              esp8089_get_dt_data(spi); // 获取设备树信息
              dt_get_n--;
          }
      
          printk("esp8089_spi: %s ENTER\n", __func__);
      
              //esp_dbg(ESP_DBG_ERROR, "esp8089_spi: %s enter\n", __func__);
      
      /* -------------------------------------------------------------------------- */\
          printk(KERN_ERR "esp8089_spi: %s Set CS LOW\n", __func__);
          gpio_request(esp_cs0_pin, "esp_cs0_pin");// #include "spi_stub.c"
          gpio_direction_output(esp_cs0_pin,0);
          gpio_free(esp_cs0_pin);
      	err = esp_setup_spi(spi); //分配一些内存,设置参数
      
      	if (err) {
      		esp_dbg(ESP_DBG_ERROR, "esp8089_spi: %s setup_spi error[%d]\n", __func__, err);
              if(sif_sdio_state == ESP_SDIO_STATE_FIRST_INIT)
      			goto _err_spi;
      		else
      			goto _err_second_init;
      	}
      	//esp_dbg(ESP_DBG_ERROR, "esp8089_spi: %s init_protocol\n", __func__);
      
      /* -------------------------------------------------------------------------- */
      
      	err = sif_spi_protocol_init(spi); //发送一堆指令
      ......
      
      

      但是这个sif_spi_protocol_init函数,是通过spi向8266发送指令,而且的确有收到8266的返回指令。这里我有几个疑问:
      1.发送的这个是什么指令?
      2.代码运行到此处,还没有下载固件,为什么8266可以响应spi指令?
      3.8266手册上讲,8266作为spi从机,协议是Command(8Bits)+address(8Bits)+read/write data(32Bytes),也就是34个字节,为什么这里只有6个字节?

      恳请大佬不吝赐教!感谢!

      int sif_spi_protocol_init(struct spi_device *spi)
      {
        unsigned char spi_proto_ini_status = 0;
        unsigned char rx_buf1[10];
        unsigned char tx_buf1[10];
        unsigned char dummy_tx_buf[10];
      
        memset(dummy_tx_buf,0xff,sizeof(dummy_tx_buf));
        printk("esp8089_spi: %s\n", __func__);
      
        do {             //会依次执行下面的命令,
          if( spi_proto_ini_status == 0 ) {
      	    int fail_count = 0;
              do {  //第二层循环
                  tx_buf1[0]=0x40;
                  tx_buf1[1]=0x00;
                  tx_buf1[2]=0x00;
                  tx_buf1[3]=0x00;
                  tx_buf1[4]=0x00;
                  tx_buf1[5]=0x95;
                  //printf("CMD0 \n");
                  printk("esp8089_spi: %s, %d\n", __FILE__, __LINE__);
                  printk("esp8089_spi: fail_count = %d\n", fail_count);
                  sif_spi_write_raw_proto(spi, tx_buf1, 6);
                  mdelay(100);
                  sif_spi_write_async_read_proto(spi, dummy_tx_buf, rx_buf1, 10);
                  esp_dbg(ESP_DBG_ERROR, "rx:[0x%02x],[0x%02x],[0x%02x],[0x%02x],[0x%02x],[0x%02x],[0x%02x],[0x%02x],[0x%02x],[0x%02x]\n", 
                  rx_buf1[0],rx_buf1[1],rx_buf1[2],rx_buf1[3],rx_buf1[4],rx_buf1[5],rx_buf1[6],rx_buf1[7],rx_buf1[8],rx_buf1[9]);
                  mdelay(100);
      		    if(++fail_count > 10)
      			    return -ETIMEDOUT;
              } while( rx_buf1[2] != 0x01 );
          } 
          else if( spi_proto_ini_status == 1 ) {
            tx_buf1[0]=0x45;
            tx_buf1[1]=0x00;
            tx_buf1[2]=0x20;               //0x04;
            tx_buf1[3]=0x00;
            tx_buf1[4]=0x00;
            tx_buf1[5]=0x01;
            //spi_err("CMD 5 1st\n");
            printk("esp8089_spi: %s, %d\n", __FILE__, __LINE__);
            sif_spi_write_raw(spi, tx_buf1, 6);
            sif_spi_write_async_read(spi,dummy_tx_buf, rx_buf1,10);
            esp_dbg(ESP_DBG_ERROR, "rx:[0x%02x],[0x%02x],[0x%02x],[0x%02x],[0x%02x],[0x%02x],[0x%02x],[0x%02x],[0x%02x],[0x%02x]\n", 
              rx_buf1[0],rx_buf1[1],rx_buf1[2],rx_buf1[3],rx_buf1[4],rx_buf1[5],rx_buf1[6],rx_buf1[7],rx_buf1[8],rx_buf1[9]);
          } 
          else if( spi_proto_ini_status == 2 ) {
            tx_buf1[0]=0x45;
            tx_buf1[1]=0x00;
            tx_buf1[2]=0x20;               
            tx_buf1[3]=0x00;
            tx_buf1[4]=0x00;
            tx_buf1[5]=0x01;
            //spi_err("CMD5 2nd\n");
            printk("esp8089_spi: %s, %d\n", __FILE__, __LINE__);
            sif_spi_write_raw(spi, tx_buf1, 6);
            sif_spi_write_async_read(spi,dummy_tx_buf, rx_buf1,10);
            esp_dbg(ESP_DBG_ERROR, "rx:[0x%02x],[0x%02x],[0x%02x],[0x%02x],[0x%02x],[0x%02x],[0x%02x],[0x%02x],[0x%02x],[0x%02x]\n", 
              rx_buf1[0],rx_buf1[1] ,rx_buf1[2],rx_buf1[3],rx_buf1[4],rx_buf1[5],rx_buf1[6],rx_buf1[7],rx_buf1[8],rx_buf1[9]);
          } 
      ...
      
      发布在 Linux
      K
      kashine
    • 回复: F1C200s RGB屏幕驱动原理问题

      大佬们,求救啊!!!

      发布在 Linux
      K
      kashine
    • F1C200s RGB屏幕驱动原理问题

      参考这个链接修改设备树, RGB屏幕可以显示, 但是我想把这个项目当做面试项目, 因此研究一下原理.
      https://blog.csdn.net/GJF712/article/details/126446054
      这个驱动用到DRM驱动的一些东西, 也生成了card0节点, 但是看设备树又不符合DRM驱动框架, 比如没有crtc encoder plane connector信息, 请问这个链接用的是DRM驱动吗?原理是什么?如果可以尽量详细一些, 谢谢大家, 谢谢大佬 !!!

      下面是ChatGPT的解释,不知道是否正确 :

      我们来详细分析一下代码中的各个部分。

      display-engine:描述了显示引擎,这是 F1C100s 处理器中的一个重要组件,用于处理图像数据。它与显示前端(display-frontend)和显示后端(display-backend)相连接。

      tcon0:代表了时序控制器(Timing Controller,简称 TCON),它负责生成正确的时序信号,以驱动显示面板。这部分代码中,我们可以看到 TCON 的寄存器地址、中断号、时钟和复位信号等信息。此外,还定义了输入和输出端口,分别连接到显示后端和显示面板。

      lcd_rgb666_pins:定义了与 RGB 屏幕连接的引脚,这里使用了 18 位的 RGB666 接口。

      display-frontend 和 display-backend:显示前端和显示后端分别负责图像数据的预处理和后处理。显示前端接收原始图像数据,对其进行缩放、色彩空间转换等操作;显示后端则负责图像数据的合成、alpha 混合等功能。这两个部分通过端口和端点(endpoint)进行连接。

      panel:描述了显示面板。这里使用了一个兼容于 "alientek,alientek_4p3_inch" 和 "simple-panel" 的面板。面板的输入端口与 TCON 的输出端口相连接。

      reg_vcc3v3:描述了一个固定电压的电源,为面板提供 3.3V 电源。

      最后,在设备树的末尾,启用了 be0(显示后端)、de(显示引擎)和 tcon0(时序控制器)节点。

      从这段代码中可以看出,该 RGB 屏幕驱动确实使用了 DRM 框架。其工作原理大致如下:

      显示前端接收原始图像数据,进行预处理。
      处理后的图像数据传递给显示后端,进行后处理和合成。
      处理后的图像数据通过 TCON 生成正确的时序信号,驱动显示面板。

      发布在 Linux
      K
      kashine
    • 回复: F1C200s类似正点原子驱动开发指南的资料?

      @whycan 在 F1C200s类似正点原子驱动开发指南的资料? 中说:

      @kashine

      这个代码风格和正点原子接近: https://item.taobao.com/item.htm?id=589639202997 (没有PY关系, 三思再下手)

      里面有教程吗?比如说某个驱动,有没有对应的教程文档,分析驱动原理与代码?谢谢晕哥

      发布在 Linux
      K
      kashine
    • F1C200s类似正点原子驱动开发指南的资料?

      感觉对于F1C200s的驱动的了解,仅限于跟着坑网的大佬操作,对于原理或者源码基本不太了解。所以想问一下各位大佬们,有没有F1C200s类似于正点原子驱动开发指南那样详细讲解驱动开发的资料?如能分享,不胜感激!

      发布在 Linux
      K
      kashine
    • 回复: F1C200s无线网卡问题源码编译?

      @whycan 好的,感谢晕哥🤙🤙🤙

      发布在 Linux
      K
      kashine
    • 回复: F1C200s无线网卡问题源码编译?

      @whycan 晕哥,那我使用arm-linux-gnueabi-就可以了是吧?

      发布在 Linux
      K
      kashine
    • F1C200s无线网卡问题源码编译?

      最近准备使用ESP12F完成F1C200s的无线网卡,但是第一步就卡住了。

      /-----------------------------------------疑问:为什么使用arm-linux- --------------------------------/
      参考链接1:https://github.com/notabucketofspam/ESP8089-SPI.git
      47fb92b9-ca69-4420-9107-6c8678a5ecac-image.png
      参考链接2:https://www.cnblogs.com/twzy/p/15160808.html
      452f846a-d972-4920-85fb-e661d54c78e7-image.png
      /----------------------------------------------------求解------------------------------------------------/
      对于F1C200s不应该是arm-linux-gnueabi-这个交叉编译器嘛?怎么他们用的是arm-linux-,而且都能编译通过,而我的报错,提示:

      make[1]: arm-linux-gcc: Command not found
      
      发布在 Linux
      K
      kashine
    • 回复: sunxi-tool具体作用是什么?F1C200s & SD卡,能否使用这个工具?

      @whycan 🐧 🐧 🐧

      发布在 Linux
      K
      kashine
    • 回复: sunxi-tool具体作用是什么?F1C200s & SD卡,能否使用这个工具?

      @whycan 晕哥牛逼,谢晕哥

      发布在 Linux
      K
      kashine