Qualcomm笔记

[1]RAM跑什么频率

cat  /sys/kernel/debug/clk/bimc_clk/measure

[2]

root@c1_dcg:/sys/class/leds/lcd-backlight # cat brightness
cat brightness

 

[3]root@c1_dcg:/ # cat proc/kmsg

[4]monkey --ignore-crashes --ignore-timeouts --kill-process-after-error --ignore-security-exceptions --throttle 1500 -v -v -v -s 5 60000000

 

[5]中断唤醒:
在终端输入下列命令:
# echo 1 > /sys/module/msm_show_resume_irq/parameters/debug_mask

[6]三十万前摄卡死,发现是mipi振幅太小,导致驱动能力不足,通过调整gc0339_lib.c的0x6a寄存器的振幅值与preview.h中的ae值改善

[7]

GPB1,即定时器1.

   定时器的输入频率 = PCLK /{prescaler value + 1} / {divider value}。

[8]

蓝牙鼠标在Setting界面边缘地带显示异常
此问题是高通平台问题,原因是SurfaceFlinger图层合成有问题

 Region::const_iterator head = layer->visibleRegion.begin(); 
 Region::const_iterator tail = layer->visibleRegion.end(); 
 while (head != tail) { 
 if (head->left <0 || head->top <0 || head->right >= hw->getWidth() |
 | head->bottom >= hw->getHeight() ) 
 { 
  cur->setSkip(true); 
  break; 
 } 
  head++; 
 }

SurfaceFlinger参考:

http://blog.csdn.net/luoshengyang/article/details/8079456

 

[9]

diff --git a/drivers/media/platform/msm/camera_v2/sensor/msm_sensor.c b/drivers/media/platform/msm/camera_v2/sensor/msm_sensor.c
index 0143a81..6bafaf2 100755
--- a/drivers/media/platform/msm/camera_v2/sensor/msm_sensor.c
+++ b/drivers/media/platform/msm/camera_v2/sensor/msm_sensor.c
@@ -1125,6 +1125,70 @@ static struct msm_camera_i2c_fn_t msm_sensor_qup_func_tbl = {
  .i2c_write_conf_tbl = msm_camera_qup_i2c_write_conf_tbl,
 };
 
+
+/* add sensor info

+*/
+static struct kobject *msm_sensor_device;
+static char module_info[80] = {0};
+
+static void msm_sensor_set_module_info(struct msm_sensor_ctrl_t *s_ctrl)
+{
+ printk("s_ctrl->sensordata->camera_type = %d\n", s_ctrl->sensordata->sensor_info->position);
+ switch (s_ctrl->sensordata->sensor_info->position) {
+ case BACK_CAMERA_B:
+  strcat(module_info, "back: ");
+  break;
+ case FRONT_CAMERA_B:
+  strcat(module_info, "front: ");
+  break;
+ default:
+  strcat(module_info, "unknown: ");
+  break;
+ }
+
+ strcat(module_info, s_ctrl->sensordata->sensor_name);
+ strcat(module_info, "\n");
+}
+
+static ssize_t msm_sensor_module_id_show(struct device *dev,
+  struct device_attribute *attr, char *buf)
+{
+ ssize_t rc = 0;
+
+ sprintf(buf, "%s\n", module_info);
+ rc = strlen(buf) + 1;
+
+ return rc;
+}
+
+static DEVICE_ATTR(sensor, 0444, msm_sensor_module_id_show, NULL);
+
+static int32_t msm_sensor_init_device_name(void)
+{
+ int32_t rc = 0;
+
+ msm_sensor_device = kobject_create_and_add("android_camera", NULL);
+ if (msm_sensor_device == NULL) {
+  pr_info("%s: subsystem_register failed\n", __func__);
+  rc = -ENOMEM;
+  return rc ;
+ }
+ rc = sysfs_create_file(msm_sensor_device, &dev_attr_sensor.attr);
+ if (rc) {
+  pr_info("%s: sysfs_create_file failed\n", __func__);
+  kobject_del(msm_sensor_device);
+ }
+
+ return 0 ;
+}
+/* add sensor info

+*/
+
+
 int32_t msm_sensor_platform_probe(struct platform_device *pdev, void *data)
 {
  int rc = 0;
@@ -1214,6 +1278,9 @@ int32_t msm_sensor_platform_probe(struct platform_device *pdev, void *data)
  msm_sd_register(&s_ctrl->msm_sd);
  CDBG("%s:%d\n", __func__, __LINE__);
 
+ msm_sensor_init_device_name();
+ msm_sensor_set_module_info(s_ctrl);
+
  s_ctrl->func_tbl->sensor_power_down(s_ctrl);
  CDBG("%s:%d\n", __func__, __LINE__);
  return rc;

 [10]monkey测试过程中遇到手机切到download模式的情况。从dump内核log看发生了data abort

日志里面有很多用户态的错误,一般这个不会导致重启。

重启原因是:
<3>[223906.016015] ion_sg_table: invalid handle passed to map_dma.
<4>[223906.020751] ------------[ cut here ]------------
<4>[223906.025369] WARNING: at /home/ubuntu/jenkins/jenkins/workspace/Build-W5256HTC-EU-8610-ARM11/label/SCM_glsrv4_Lin/kernel/drivers/gpu/ion/msm/ion_iommu_map.c:522 ion_unmap_iommu+0x12c/0x1ac()
<6>[223906.042347] ion_unmap_iommu: (5,0) was never mapped for 000bdd83
<6>[223906.042366] Modules linked in: [last unloaded: wlan]
<6>[223906.042424] [<c010cc94>] (unwind_backtrace+0x0/0x138) from [<c018b6a8>] (warn_slowpath_common+0x4c/0x64)
<6>[223906.042461] [<c018b6a8>] (warn_slowpath_common+0x4c/0x64) from [<c018b754>] (warn_slowpath_fmt+0x30/0x40)
<6>[223906.042498] [<c018b754>] (warn_slowpath_fmt+0x30/0x40) from [<c0478b60>] (ion_unmap_iommu+0x12c/0x1ac)
<6>[223906.042543] [<c0478b60>] (ion_unmap_iommu+0x12c/0x1ac) from [<c05c96fc>] (msm_isp_buf_unprepare+0xc8/0x120)
<6>[223906.042584] [<c05c96fc>] (msm_isp_buf_unprepare+0xc8/0x120) from [<c05c97a4>] (msm_isp_release_bufq+0x50/0x70)
<6>[223906.042622] [<c05c97a4>] (msm_isp_release_bufq+0x50/0x70) from [<c05ca290>] (msm_isp_proc_buf_cmd+0x7c/0x84)
<6>[223906.042662] [<c05ca290>] (msm_isp_proc_buf_cmd+0x7c/0x84) from [<c05cc0e0>] (msm_isp_ioctl+0x9c/0x354)
<6>[223906.042701] [<c05cc0e0>] (msm_isp_ioctl+0x9c/0x354) from [<c05e9a7c>] (subdev_do_ioctl+0x144/0x558)
<6>[223906.042741] [<c05e9a7c>] (subdev_do_ioctl+0x144/0x558) from [<c05dee78>] (video_usercopy+0x148/0x57c)
<6>[223906.042779] [<c05dee78>] (video_usercopy+0x148/0x57c) from [<c05de168>] (v4l2_ioctl+0x94/0x138)
<6>[223906.042817] [<c05de168>] (v4l2_ioctl+0x94/0x138) from [<c026ed48>] (do_vfs_ioctl+0x84/0x5ac)
<6>[223906.042852] [<c026ed48>] (do_vfs_ioctl+0x84/0x5ac) from [<c026f2dc>] (sys_ioctl+0x6c/0x7c)
<6>[223906.042887] [<c026f2dc>] (sys_ioctl+0x6c/0x7c) from [<c0106720>] (ret_fast_syscall+0x0/0x30)
<4>[223906.042910] ---[ end trace c716865583a4b41b ]---
<1>[223906.047027] Unable to handle kernel paging request at virtual address 000bdd87
<1>[223906.054252] pgd = f2f4c000
<1>[223906.057082] [000bdd87] *pgd=00000000
<0>[223906.060681] Internal error: Oops: 5 [#1] PREEMPT SMP ARM
<6>[223906.066062] Modules linked in: [last unloaded: wlan]
<6>[223906.071099] CPU: 2 Tainted: G W O (3.4.0-g80ec9c8-01181-g969bc63-dirty #1)
<6>[223906.079089] PC is at ion_free+0x8/0xac
<6>[223906.082907] LR is at msm_isp_buf_unprepare+0xd8/0x120

这个看上去和显示有关

 

[11]

貌似是CPU接屏ID的管脚被屏损坏了。发现屏的这个ID脚在屏上是直接接到VDDIO上,没有串联电阻,我们主板上对应的GPIO口也没有串入限流的电阻。所以,高度怀疑是这个GPIO口在被直接接到电源VDDIO后造成损坏。

[12]

在Pre-CS2.1.21.3基线,YUV模组显示黑屏,RAW显示正常。

sensor.c,isp_stats.h,isp_hw.c,cpp_module.c

D/QCamera2HWI( 206): int qcamera::QCamera2HardwareInterface::startPreview(): X
D/QCamera2HWI( 206): [KPI Perf] static int qcamera::QCamera2HardwareInterface::start_preview(camera_device*): X
E/QCameraParameters( 206): [KPI Perf] int32_t qcamera::QCameraParameters::setFaceDetection(bool): PROFILE_FACE_DETECTION_VALUE = 1 num_fd = 5
D/QCameraParameters( 206): int32_t qcamera::QCameraParameters::initBatchUpdate(void*):Initializing batch parameter set
D/QCameraParameters( 206): int32_t qcamera::QCameraParameters::AddSetParmEntryToBatch(void*, cam_intf_parm_type_t, uint32_t, void*): num_entry: 1, paramType: 30, paramLength: 8, aligned_size_req: 24
E/mm-camera( 225): mct_pipeline_process_set:command=800000e
E/mm-camera( 225): mct_pipeline_send_ctrl_events: Send Set Parm events
D/QCameraParameters( 206): int32_t qcamera::QCameraParameters::commitSetBatch():waiting for commitSetBatch to complete
D/QCameraParameters( 206): int32_t qcamera::QCameraParameters::setFaceDetection(bool): FaceProcMask -> 1
D/Camera ( 2281): app passed NULL surface
I/CameraClient( 206): stopPreview: Disable picture related messages
E/QCamera2HWI( 206): [KPI Perf] static void qcamera::QCamera2HardwareInterface::stop_preview(camera_device*): E PROFILE_STOP_PREVIEW
D/QCamera2HWI( 206): int qcamera::QCamera2HardwareInterface::stopPreview(): E

Via above log:
the walkflow is :
start_preview->QCameraParameters::setFaceDetection-> initBatchUpdate-> AddSetParmEntryToBatch ->D/Camera ( 2281): app passed NULL surface

It seems that the is a Null surface passed from upper layer.
In normal preview, the log: "app passed Null surface doesn't appear".

 

catch yuv data.
static void isp_ch_util_dump_frame(int ion_fd, mct_stream_info_t *stream_info,
isp_frame_buffer_t *image_buf, uint32_t frame_idx)
{
...
CDBG("%s:frame_idx %d enabled %d streamtype %d width %d height %d",....

property_get("persist.camera.isp.dump", value, "0");
enabled = atoi(value);
if(!enabled){
sDumpFrmCnt = 0;
return;
}
if(sDumpFrmCnt >= 0 && sDumpFrmCnt <= frm_num) {
...
"/data/isp_dump_%d_preview_%d_%d.yuv"
// "/data/isp_dump_%d_video_%d_%d.yuv"
"/data/isp_dump_%d_postview_%d_%d.yuv"
"/data/isp_dump_%d_snapshot_%d_%d.yuv"

the yuv data will be saved in /data/
please try to use below cmd and upload yuv data.
adb shell setprop persist.camera.isp.dump 1

adb shell setprop persist.camera.isp.dump 1

取出preview, postview, snapshot的yuv data.
setprop persist.camera.isp.dump 1



 

diff --git a/QCamera2/HAL/QCamera2HWICallbacks.cpp b/QCamera2/HAL/QCamera2HWICallbacks.cpp
index 6b40ec3..a3f1614 100644
--- a/ QCamera2/HAL/QCamera2HWICallbacks.cpp
+++ b/ QCamera2/HAL/QCamera2HWICallbacks.cpp
@@ -1430,8 +1430,11 @@ void QCamera2HardwareInterface::dumpFrameToFile(QCameraStream *stream,
case QCAMERA_DUMP_FRM_SNAPSHOT:
{
mParameters.getStreamDimension(CAM_STREAM_TYPE_SNAPSHOT, dim);
- snprintf(buf, sizeof(buf), "/data/%ds_%dx%d_%d.yuv",
- mDumpFrmCnt, dim.width, dim.height, frame->frame_idx);
+ snprintf(buf, sizeof(buf), "%ds_%dx%d_%d.yuv",
+ mDumpFrmCnt,
+ dim.width,
+ dim.height,
+ frame->frame_idx);
}
break;
case QCAMERA_DUMP_FRM_VIDEO:
@@ -1443,15 +1446,21 @@ void QCamera2HardwareInterface::dumpFrameToFile(QCameraStream *stream,
case QCAMERA_DUMP_FRM_RAW:
{
mParameters.getStreamDimension(CAM_STREAM_TYPE_RAW, dim);
- snprintf(buf, sizeof(buf), "/data/%dr_%dx%d_%d.yuv",
- mDumpFrmCnt, dim.width, dim.height, frame->frame_idx);
+ snprintf(buf, sizeof(buf), "%dr_%dx%d_%d.raw",
+ mDumpFrmCnt,
+ dim.width,
+ dim.height,
+ frame->frame_idx);
}
break;
case QCAMERA_DUMP_FRM_JPEG:
{
mParameters.getStreamDimension(CAM_STREAM_TYPE_SNAPSHOT, dim);
- snprintf(buf, sizeof(buf), "/data/%dj_%dx%d_%d.yuv",
- mDumpFrmCnt, dim.width, dim.height, frame->frame_idx);
+ snprintf(buf, sizeof(buf), "%dj_%dx%d_%d.yuv",
+ mDumpFrmCnt,
+ dim.width,
+ dim.height,
+ frame->frame_idx);
}
break;
default:

 root@msm8226:/data # ls |grep isp
ls |grep isp
isp_dump_64_preview_640_480.yuv
isp_dump_65_preview_640_480.yuv
isp_dump_66_preview_640_480.yuv
isp_dump_67_preview_640_480.yuv
isp_dump_68_preview_640_480.yuv
isp_dump_69_preview_640_480.yuv
isp_dump_70_preview_640_480.yuv
isp_dump_71_preview_640_480.yuv
isp_dump_72_preview_640_480.yuv
isp_dump_73_preview_640_480.yuv
isp_dump_74_preview_640_480.yuv

[13]

<3>[  653.808032] mmc1: data txfr (0x00200000) error: -84 after 16 ms
<6>[  653.808039] sdhci: =========== REGISTER DUMP (mmc1)===========
<6>[  653.808049] sdhci: Sys addr: 0x00000000 | Version:  0x00003a02
<6>[  653.808060] sdhci: Blk size: 0x00007200 | Blk cnt:  0x00000001
<6>[  653.808070] sdhci: Argument: 0x00504590 | Trn mode: 0x00000003
<6>[  653.808080] sdhci: Present:  0x03e80100 | Host ctl: 0x00000017
<6>[  653.808090] sdhci: Power:    0x0000000f | Blk gap:  0x00000000
<6>[  653.808101] sdhci: Wake-up:  0x00000000 | Clock:    0x00000007
<6>[  653.808111] sdhci: Timeout:  0x0000000f | Int stat: 0x00000000
<6>[  653.808122] sdhci: Int enab: 0x03ff800b | Sig enab: 0x03ff800b
<6>[  653.808130] sdhci: AC12 err: 0x00000000 | Slot int: 0x00000000
<6>[  653.808141] sdhci: Caps:     0x2329c8b2 | Caps_1:   0x00008007
<6>[  653.808151] sdhci: Cmd:      0x0000183a | Max curr: 0x00000000
<6>[  653.808161] sdhci: Resp 1:   0x00000000 | Resp 0:   0x00000900
<6>[  653.808171] sdhci: Resp 3:   0x00000000 | Resp 2:   0x00000000
<6>[  653.808178] sdhci: Host ctl2: 0x0000000b
<6>[  653.808187] sdhci: ADMA Err: 0x00000000 | ADMA Ptr: 0x33b60010
<6>[  653.808196] mmc1: clk: 200000000 clk-gated: 0 claimer: mmcqd/1 pwr: 14
<6>[  653.808203] mmc1: rpmstatus[pltfm](runtime-suspend:usage_count:disable_depth)(0:0:0)
<6>[  653.808209] sdhci: ===========================================

 

Patch for T card tx error.
   
    Change-Id: I4be8a30fbee0b6c06666f6d48d70a622f01d7d82

diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
index 743668b..e36a2cf 100755
--- a/drivers/mmc/card/block.c
+++ b/drivers/mmc/card/block.c
@@ -2326,8 +2326,11 @@ static int mmc_blk_cmd_err(struct mmc_blk_data *md, struct mmc_card *card,
   u32 blocks;
   if (!brq->data.fault_injected) {
    blocks = mmc_sd_num_wr_blocks(card);
-   if (blocks != (u32)-1)
+   if (blocks != (u32)-1) {
+    if (blocks << 9 == blk_rq_bytes(req))
+     pr_err("%s: buggy SD card\n", __func__);
     ret = blk_end_request(req, 0, blocks << 9);
+   }
   } else
    ret = blk_end_request(req, 0, brq->data.bytes_xfered);
  } else {
@@ -2488,29 +2491,61 @@ static int mmc_blk_issue_rw_rq(struct mmc_queue *mq, struct request *rqc)
     rqc = NULL;
     goto cmd_abort;
    }
+   if (ret)
+    pr_warning("%s: %s: command partially completed\n",
+     mmc_hostname(card->host), __func__);
    break;
   case MMC_BLK_CMD_ERR:
    ret = mmc_blk_cmd_err(md, card, brq, req, ret);
-   if (!mmc_blk_reset(md, card->host, type))
+   if (!mmc_blk_reset(md, card->host, type)) {
+    if (!ret) {
+     BUG_ON(card->host->areq);
+     pr_err("%s: invalid scenario for MMC_BLK_CMD_ERR, xfered %d, req %p\n",
+       __func__,
+       brq->data.bytes_xfered,
+       req);
+     goto start_new_req;
+    }
+    pr_err("%s: %s: reset success, retry prev command\n",
+     mmc_hostname(card->host), __func__);
     break;
+   }
+   pr_err("%s: %s: reset failed, aborting command\n",
+     mmc_hostname(card->host), __func__);
    goto cmd_abort;
   case MMC_BLK_RETRY:
-   if (retry++ < 5)
+   if (retry++ < 5) {
+    pr_err("%s: %s: MMC_BLK_RETRY, cnt %d, ret %d\n",
+     mmc_hostname(card->host),
+     __func__, retry, ret);
     break;
+   }
    /* Fall through */
   case MMC_BLK_ABORT:
-   if (!mmc_blk_reset(md, card->host, type))
+   if (!mmc_blk_reset(md, card->host, type)) {
+    pr_err("%s: %s: reset success during abort, ret %d\n",
+     mmc_hostname(card->host),
+     __func__, ret);
     break;
+   }
+   pr_err("%s: %s: reset failed during abort, aborting command\n",
+     mmc_hostname(card->host), __func__);
    goto cmd_abort;
   case MMC_BLK_DATA_ERR: {
    int err;
 
    err = mmc_blk_reset(md, card->host, type);
-   if (!err)
+   if (!err) {
+    pr_err("%s: %s: reset success, during data err ret %d\n",
+     mmc_hostname(card->host),
+     __func__, ret);
     break;
+   }
    if (err == -ENODEV ||
     mq_rq->packed_cmd != MMC_PACKED_NONE)
     goto cmd_abort;
+   pr_err("%s: %s: reset failed, during data err fall through\n",
+     mmc_hostname(card->host), __func__);
    /* Fall through */
   }
   case MMC_BLK_ECC_ERR:
@@ -2528,10 +2563,16 @@ static int mmc_blk_issue_rw_rq(struct mmc_queue *mq, struct request *rqc)
     */
    ret = blk_end_request(req, -EIO,
       brq->data.blksz);
+   pr_err("%s: %s: reset failed for ecc err, ret %d\n",
+     mmc_hostname(card->host),
+     __func__, ret);
+
    if (!ret)
     goto start_new_req;
    break;
   case MMC_BLK_NOMEDIUM:
+   pr_err("%s: %s: no medium, aborting command\n",
+     mmc_hostname(card->host), __func__);
    goto cmd_abort;
   default:
    pr_err("%s:%s: Unhandled return value (%d)",

 

diff --git a/drivers/mmc/card/queue.c b/drivers/mmc/card/queue.c
index 8986829..637c467 100755
--- a/drivers/mmc/card/queue.c
+++ b/drivers/mmc/card/queue.c
@@ -30,6 +30,9 @@
  */
 #define DEFAULT_NUM_REQS_TO_START_PACK 17
 
+struct mmc_queue *tsr_mq;
+struct mmc_card *tsr_card;
+
 /*
  * Prepare a MMC request. This just filters out odd stuff.
  */
@@ -61,6 +64,11 @@ static int mmc_queue_thread(void *d)
 
  current->flags |= PF_MEMALLOC;
 
+ if (mmc_card_sd(card)) {
+  tsr_mq = mq;
+  tsr_card = card;
+ }
+
  down(&mq->thread_sem);
  do {
   struct mmc_queue_req *tmp;
@@ -94,6 +102,18 @@ static int mmc_queue_thread(void *d)
     * Current request becomes previous request
     * and vice versa.
     */
+   if (mmc_card_sd(card) && mq->mqrq_prev->req) {
+    int in_flight = 0;
+    in_flight = q->in_flight[0] +
+     q->in_flight[1];
+    if (in_flight >= 2) {
+     pr_err("TSR %s: in_flight %d\n", __func__, in_flight);
+     BUG_ON(1);
+    } else if (in_flight == 1 && !mq->mqrq_cur->req) {
+     pr_err("TSR %s: in_flight %d\n", __func__, in_flight);
+     BUG_ON(1);
+    }
+   }
    mq->mqrq_prev->brq.mrq.data = NULL;
    mq->mqrq_prev->req = NULL;
    tmp = mq->mqrq_prev;

 

[15]

 [16]

屏无法唤醒

 

1、DDR部分原理图和LAYOUT检查,确认没有问题。
2、CPU和memory部分电压和时钟做了测量,没有看到有异常
3、换了一颗hynix的memory,故障现象没有消失
4、换了一颗CPU,刚开始开机正常,跑了10几分钟DDR测试工具死机。再开机再跑几十秒就死了,再后来开不了机了。重新对CPU加焊了下,目前开关机10几次正常,正准备再次跑DDR测试。

 

[17]


 

 

 


 [18]尝试修改内存信号---调试

diff --git a/boot_images/core/boot/ddr/hw/msm8x10/ddr_config.c b/boot_images/core/boot/ddr/hw/msm8x10/ddr_config.c
index 7e9005f..105c957 100644
--- a/boot_images/core/boot/ddr/hw/msm8x10/ddr_config.c
+++ b/boot_images/core/boot/ddr/hw/msm8x10/ddr_config.c
@@ -172,7 +172,7 @@ uint32 ddr_dqphy_config_MSM8x10[][2] =
   {HWIO_ADDR(PHY_DQ_ADDR(RD_CDC_SW_OVRD_CFG)), 0x00000},
   {HWIO_ADDR(PHY_DQ_ADDR(TOP_CFG)), 0x00000031},
   {HWIO_ADDR(PHY_DQ_ADDR(WR_CDC_DELAY_CFG)), 0x0000758},
-  {HWIO_ADDR(PHY_DQ_ADDR(WR_CDC_OFFSET_CFG)), 0x000000},
+  {HWIO_ADDR(PHY_DQ_ADDR(WR_CDC_OFFSET_CFG)), 0x000086},
   {HWIO_ADDR(PHY_DQ_ADDR(WR_CDC_SW_OVRD_CFG)), 0x00000},
   {0x0, 0x0}
 };

    [patch]add DDR fault tolerant ability

diff --git a/boot_images/core/boot/ddr/hw/msm8x10/ddr_config.c b/boot_images/core/boot/ddr/hw/msm8x10/ddr_config.c
index cb95d40..7e9005f 100644
--- a/boot_images/core/boot/ddr/hw/msm8x10/ddr_config.c
+++ b/boot_images/core/boot/ddr/hw/msm8x10/ddr_config.c
@@ -143,8 +143,8 @@ uint32 ddr_caphy_config_MSM8x10[][2] =
   {HWIO_ADDR(PHY_CA_ADDR(IOC_CTLR_CHAR_CFG)), 0x00000000},
   {HWIO_ADDR(PHY_CA_ADDR(IOC_CTLR_PNCNT_CFG)), 0x00001010},
   {HWIO_ADDR(PHY_CA_ADDR(IOC_CTLR_TIMER_CFG)), 0xFA000020},
-  {HWIO_ADDR(PHY_CA_ADDR(PAD_CFG0)), 0x20222240},
-  {HWIO_ADDR(PHY_CA_ADDR(PAD_CFG1)), 0x20220440},
+  {HWIO_ADDR(PHY_CA_ADDR(PAD_CFG0)), 0x202222C0},
+  {HWIO_ADDR(PHY_CA_ADDR(PAD_CFG1)), 0x202204C0},
   {HWIO_ADDR(PHY_CA_ADDR(PAD_CFG2)), 0x10000000},
   {HWIO_ADDR(PHY_CA_ADDR(PAD_CFG3)), 0x313003FF},
   {HWIO_ADDR(PHY_CA_ADDR(PAD_CFG4)), 0x303003FF},
@@ -161,11 +161,11 @@ uint32 ddr_dqphy_config_MSM8x10[][2] =
   {HWIO_ADDR(PHY_DQ_ADDR(DQS_IOC_SLV_CFG)), 0x80000000},
   {HWIO_ADDR(PHY_DQ_ADDR(DQ_IOC_SLV_CFG)), 0x80000000},
   {HWIO_ADDR(PHY_DQ_ADDR(DQ_SMT_STATUS)), 0x00000000},
-  {HWIO_ADDR(PHY_DQ_ADDR(PAD_CFG0)), 0xA0222240},
-  {HWIO_ADDR(PHY_DQ_ADDR(PAD_CFG1)), 0xA0222240},
+  {HWIO_ADDR(PHY_DQ_ADDR(PAD_CFG0)), 0xA02222C0},
+  {HWIO_ADDR(PHY_DQ_ADDR(PAD_CFG1)), 0xA02222C0},
   {HWIO_ADDR(PHY_DQ_ADDR(PAD_CFG2)), 0x10000000},
   {HWIO_ADDR(PHY_DQ_ADDR(PAD_CFG3)), 0x1000FF11},
-  {HWIO_ADDR(PHY_DQ_ADDR(PAD_CFG4)), 0x20222240},
+  {HWIO_ADDR(PHY_DQ_ADDR(PAD_CFG4)), 0x202222C0},
   {HWIO_ADDR(PHY_DQ_ADDR(RD_CDC_DELAY_CFG)), 0x00003AC},
   {HWIO_ADDR(PHY_DQ_ADDR(RD_CDC_OFFSET_CFG)), 0x000000},
   {HWIO_ADDR(PHY_DQ_ADDR(RD_CDC_SLAVE_DDA_CFG)), 0x16334},

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 高通Atheros QCA9377是一款Wi-Fi和蓝牙芯片,广泛应用于笔记本电脑、平板电脑、智能手机等设备中。它支持802.11ac标准,提供高速无线网络连接和稳定的蓝牙连接。该芯片具有低功耗、高性能和可靠性等优点,是当前市场上较为流行的无线通信芯片之一。 ### 回答2: Qualcomm Atheros QCA9377是Qualcomm Atheros公司生产的一款无线网络芯片。这款芯片使用了802.11ac标准,支持5GHz频段,通过单天线技术实现了最大433Mbps的传输速率。它还支持蓝牙4.1和蓝牙低功耗(BLE)技术,具有较低的功耗和更高的传输速率。 这款芯片还支持多种无线安全协议,包括WPA2、WPA、WEP和802.1x。这些协议可以保证无线网络的安全性,防止不法分子对无线信号进行攻击。 QCA9377也具有出色的兼容性,可以与大多数主流操作系统兼容,包括Windows、Linux和Android等。这使得它能够在各种设备上得到广泛应用,例如笔记本电脑、平板电脑、智能手机和家庭路由器等。 总的来说,QCA9377是一款出色的无线网络芯片,具有高速传输、低功耗、多种安全协议和兼容性等特点。它的出现为无线网络领域的发展带来了更多的可能性,将为用户带来更加流畅、便捷和安全的无线网络体验。 ### 回答3: Qualcomm Atheros QCA9377是一款用于Wi-Fi连接的芯片。它主要被应用在笔记本电脑、平板电脑、智能手机、路由器、智能家居等设备上,用于提供可靠和高速的Wi-Fi连接。 QCA9377采用了最新的IEEE 802.11ac标准,可以支持双频带(2.4 GHz和5 GHz)和多个MIMO天线。因此,它能够实现更快、更稳定和更高效的Wi-Fi连接。在2.4 GHz频段下,QCA9377可以实现最大的连接速度达到400 Mbps;在5 GHz频段下,它可以实现最大的连接速度达到867 Mbps。 除了Wi-Fi连接,QCA9377还支持蓝牙4.1连接和NFC连接。它还提供了一些先进的安全和隐私特性,如802.11i、802.1x和WPA/WPA2等协议。 由于QCA9377可以完美地与Qualcomm Technologies的智能手机处理器和LTE调制解调器进行集成,所以很多高端智能手机和平板电脑也都选择使用它。 总的来说,Qualcomm Atheros QCA9377是一款先进而强大的Wi-Fi连接芯片,可以为设备提供更快、更稳定和更高效的无线连接。它的广泛应用,大大提升了人们的无线通信体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值