导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页
    1. 主页
    2. mengxp
    M
    • 资料
    • 关注 1
    • 粉丝 2
    • 我的积分 2093
    • 主题 8
    • 帖子 43
    • 最佳 2
    • 群组 0

    mengxpLV 5

    @mengxp

    2093
    积分
    2
    声望
    26
    资料浏览
    43
    帖子
    2
    粉丝
    1
    关注
    注册时间 最后登录

    mengxp 取消关注 关注

    mengxp 发布的最佳帖子

    • 回复: rtl8723ds高并发时死锁有人遇到过吗

      已初步确定是螃蟹的AP模式逻辑问题,并非死锁。

      测试环境
      1.rtl8723ds (AP) <-----> iphone (STA)

      触发条件
      1.作为AP模式
      2.正在发送数据
      3.对方STA进入SLEEP模式,有概率触发该bug。

      问题描述
      1.hal\rtl8723d\sdio\rtl8723ds_xmit.c 中 xmit_xmitframes 函数
      #ifdef CONFIG_AP_MODE
      if (MLME_IS_AP(padapter) || MLME_IS_MESH(padapter)) {
      if ((pxmitframe->attrib.psta->state & WIFI_SLEEP_STATE) &&
      (pxmitframe->attrib.triggered == 0)) {
      RTW_INFO("%s: one not triggered pkt in queue when this STA sleep, break and goto next sta\n", func);
      break;
      }
      }
      #endif

      这段代码意图其实是符合 80211 中的传统省电模式 (Legacy Power Save)

      传统省电模式 (Legacy Power Save)
      假设某个时间STA进入sleep,它通过发送数据帧或null-date帧来告诉AP我进入省电了
      AP收到这个帧后就不发数据帧给处于省电模式下的STA了。
      STA会在下一个 DITM period wake up,并收到AP的beacon
      在beacon 中DTIM 信息元素会告诉 STA,你sleep的时候有发你的数据,我替你存下了,快来取

      但实际工作的时候不知道为什么驱动会反复的触发发送信号量,然后反复的进入这个流程,导致 RTWHALXT 线程占满CPU。
      而且影响到了正常的收发逻辑。

      暂时解决方案
      注释掉上述 break; 语句,逻辑变更为,即使 STA 进入休眠仍然发送,STA收不到就收不到,该帧就算丢弃了。
      实验发现也并没有造成多大的通讯延迟影响。

      后续解决方案
      联系模块fae尝试解决。但我不认为模块fae方面有能力解决这个问题。(我是普通用户不是VIP)

      发布在 A Series
      M
      mengxp
    • 回复: t133使用USB1做host插入U盘不能挂载磁盘

      @jacky502 你做板子是完全不考虑差分走线的阻抗、信号完整性、串扰。
      虽然说USB2.0要求不高,但是为了确定是不是完整性问题。我建议你做如下步骤

      在芯片USB引脚就近切断走线,使用等长的飞线连接USB座子(不是板子上的USB座,是额外的)
      然后插优盘测试。
      如果你要用板子上的USB座测试,那么USB座的信号线也要切断。也就是放弃你画的走线。

      总之这种情况大概率是信号完整性问题。

      你的板子是双层板,在设计时建议:
      1.如果阻抗值无法满足,起码要满足阻抗连续,双层板的做法就是保证信号线的背面有连续的地平面,且沿信号线打地孔。如果不知道怎么做,建议拆个华为的光猫看一下你就懂了。华为的低成本光猫都是双层板,他是如何做DRAM走线、2.5G光差分信号、1G网口信号、USB信号,都是值得学习的。
      2.少过孔,做等长。虽然你这个走线过孔其实不多,但问题也恰恰最有可能出在孔上,你要知道现在的快板厂,过孔质量其实很渣,这也是为什么有些板厂提出四线低阻这个东西,虽然是噱头吧,但是也是有道理的,起码他可以保证自己的过孔有实力。
      3.避免串扰,高速信号远离其他信号线。
      4.供电串扰问题,加磁珠,退耦电容。

      发布在 其它全志芯片讨论区
      M
      mengxp

    mengxp 发布的最新帖子

    • USB NCM Gadget 速率慢的问题

      https://open.allwinnertech.com/#/faq/0/show?faqId=2086&menuID=17
      这个FAQ中没有提到具体修改了哪个函数哪个语句,请问可以详细说明一下吗?

      发布在 其它全志芯片讨论区
      M
      mengxp
    • 回复: T113-S3 Longan SDK 调试AP6212问题求助

      @zhangwei 在 T113-S3 Longan SDK 调试AP6212问题求助 中说:

      wiphy_register

      遇到一模一样的问题,应该还没到加载博通固件的环节,在调用wiphy_register就崩溃了

      发布在 MR Series
      M
      mengxp
    • 回复: cryptoengine TRNG模块内存泄露

      @mengxp 看了下r328上使用的v3代码,关键字alloc,我发现有

      ss_rng_start buf 内存泄露 (kmalloc without kfree)

      目前就发现这一个

      发布在 其它全志芯片讨论区
      M
      mengxp
    • cryptoengine TRNG模块内存泄露

      写了个afalg测试 TRNG 接口,发现有内存泄露,肉眼可见的内存泄露。应该是发生在内核层面的。

      我的芯片是 R328-S3,Tina 3.5 SDK
      测试代码如下,原厂大神来看看吧。

      运行前free一下,然后等跑了几千轮几万轮后再free一下,少了很多MB内存。
      用top看一下,发现测试程序没有占用多少内存,所以基本可以石锤是内核层面内存泄露。

      我这边也慢慢分析下 sunxi-ss 模块哪里有泄露。

      #include <errno.h>
      #include <stdint.h>
      #include <sys/uio.h>
      #include <sys/syscall.h>
      #include <sys/socket.h>
      #include <linux/if_alg.h>
      #include <stddef.h>
      #include <stdio.h>
      #include <stdlib.h>
      #include <string.h>
      #include <unistd.h>
      
      #ifndef SOL_ALG
      #define SOL_ALG 279
      #endif
      
      int os_get_random(unsigned char *buf, size_t len)
      {
          int trng_tfmfd = 0;
          int trng_opfd = 0;
          int retval = -1;
      
          do {
              struct sockaddr_alg sa = {
                .salg_family = AF_ALG,
                .salg_type = "rng",
                .salg_name = "trng"
              };
              int ret;
      
              trng_tfmfd = socket(AF_ALG, SOCK_SEQPACKET, 0);
              if (trng_tfmfd < 0)
              {
                  printf("socket failed\n");
                  break;
              }
      
              ret = bind(trng_tfmfd, (struct sockaddr *)&sa, sizeof(sa));
              if (ret)
              {
                  printf("bind failed\n");
                  break;
              }
      
              trng_opfd = accept(trng_tfmfd, NULL, 0);
              if (trng_opfd < 0)
              {
                  printf("accept failed\n");
                  break;
              }
      
              retval = 0;
              while (len > 0)
              {
                  ret = read(trng_opfd, buf, len);
                  if (ret < 0)
                  {
                      retval = -1;
                      break;
                  }
                  buf += ret;
                  len -= ret;
              }
      
          } while (0);
      
          if (trng_opfd > 0)
              close(trng_opfd);
      
          if (trng_tfmfd > 0)
              close(trng_tfmfd);
      
          return retval;
      }
      
      #if 1
      unsigned char trng_buf[65536];
      
      void Test_TRNG(void)
      {
          int i = 0;
      
          while(1)
          {
              os_get_random(trng_buf, 512);
      
              if(!(i++ % 1000))
                  printf("random %d\n", i);
          }
      }
      
      int main(void)
      {
          Test_TRNG();
          return 0;
      }
      #endif
      
      
      发布在 其它全志芯片讨论区
      M
      mengxp
    • 回复: t133使用USB1做host插入U盘不能挂载磁盘

      @jacky502 你做板子是完全不考虑差分走线的阻抗、信号完整性、串扰。
      虽然说USB2.0要求不高,但是为了确定是不是完整性问题。我建议你做如下步骤

      在芯片USB引脚就近切断走线,使用等长的飞线连接USB座子(不是板子上的USB座,是额外的)
      然后插优盘测试。
      如果你要用板子上的USB座测试,那么USB座的信号线也要切断。也就是放弃你画的走线。

      总之这种情况大概率是信号完整性问题。

      你的板子是双层板,在设计时建议:
      1.如果阻抗值无法满足,起码要满足阻抗连续,双层板的做法就是保证信号线的背面有连续的地平面,且沿信号线打地孔。如果不知道怎么做,建议拆个华为的光猫看一下你就懂了。华为的低成本光猫都是双层板,他是如何做DRAM走线、2.5G光差分信号、1G网口信号、USB信号,都是值得学习的。
      2.少过孔,做等长。虽然你这个走线过孔其实不多,但问题也恰恰最有可能出在孔上,你要知道现在的快板厂,过孔质量其实很渣,这也是为什么有些板厂提出四线低阻这个东西,虽然是噱头吧,但是也是有道理的,起码他可以保证自己的过孔有实力。
      3.避免串扰,高速信号远离其他信号线。
      4.供电串扰问题,加磁珠,退耦电容。

      发布在 其它全志芯片讨论区
      M
      mengxp
    • 回复: 获取全志芯片的唯一ID

      @yteraa 加密还是得用 SSK

      发布在 其它全志芯片讨论区
      M
      mengxp
    • 回复: R328安全启动失败,调试寄存器资料可否公开?

      分析到了。上下电时序可能有异常,破坏了efuse中rotpk的某些比特。

      正确的rotpk
      74e61bc6f59b1382a29019xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

      芯片中的rotpk
      74e61bc6fd9b1382a39019xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

      果然efuse供电引脚需要改成按需上电。

      发布在 其它全志芯片讨论区
      M
      mengxp
    • 回复: R11的I2S没有MCLK引脚, 如果要驱动声卡,应该怎么处理呢?可以用一个24.576MHz有源晶振代替吗?

      @whycan 哇,那就离谱,看来全志的I2S接口很拉胯啊

      发布在 A Series
      M
      mengxp
    • 回复: R328安全启动失败,调试寄存器资料可否公开?

      @musich
      我今天用IDA撸完了,已经掌握了相关寄存器和SRAM中的几个调试数据。
      启动失败进FEL读一下就可以了。
      不得不说全志的SBROM开发人员还是有两把刷子。

      发布在 其它全志芯片讨论区
      M
      mengxp
    • 回复: R11的I2S没有MCLK引脚, 如果要驱动声卡,应该怎么处理呢?可以用一个24.576MHz有源晶振代替吗?

      @ubuntu 在 R11的I2S没有MCLK引脚, 如果要驱动声卡,应该怎么处理呢?可以用一个24.576MHz有源晶振代替吗? 中说:

      , 播放音乐鸦雀无声。

      等晕哥试试?

      发布在 A Series
      M
      mengxp