当前位置: 首页 > news >正文

怎么做网站的访问量整站seo怎么做

怎么做网站的访问量,整站seo怎么做,免费做优化的网站建设,网站开发服务转包合同物联网开发源码案例集: 链接:https://pan.baidu.com/s/1kfPDpYZpm_G0GBLAup3KTQ?pwdvgvv I2C 使用 简介 AIO-3399J 开发板上有 9 个片上 I2C 控制器,各个 I2C 的使用情况如下表: 本文主要描述如何在该开发板上配置 I2C。 配置…

物联网开发源码案例集:

链接:https://pan.baidu.com/s/1kfPDpYZpm_G0GBLAup3KTQ?pwd=vgvv

=============================================================

I2C 使用

简介

AIO-3399J 开发板上有 9 个片上 I2C 控制器,各个 I2C 的使用情况如下表:

_images/i2c_list.jpg

本文主要描述如何在该开发板上配置 I2C。

配置 I2C 可分为两大步骤:

  • 定义和注册 I2C 设备

  • 定义和注册 I2C 驱动

下面以配置 GSL3680 为例。

定义和注册 I2C 设备

在注册 I2C 设备时,需要结构体 i2c_client 来描述 I2C 设备。然而在标准 Linux 中,用户只需要提供相应的 I2C 设备信息,Linux 就会根据所提供的信息构造 i2c_client 结构体。

用户所提供的 I2C 设备信息以节点的形式写到 DTS 文件中,如下所示:

kernel/arch/arm64/boot/dts/rockchip/rk3399-firefly-edp.dts
&i2c4 {status = "okay";gsl3680: gsl3680@41 {compatible = "gslX680";reg = <0x41>;screen_max_x = <1536>;screen_max_y = <2048>;touch-gpio = <&gpio1 20 IRQ_TYPE_LEVEL_LOW>;reset-gpio = <&gpio0 12 GPIO_ACTIVE_HIGH>;};
};

定义和注册 I2C 驱动

定义 I2C 驱动

在定义 I2C 驱动之前,用户首先要定义变量 of_device_id 和 i2c_device_id

of_device_id 用于在驱动中调用 DTS 文件中定义的设备信息,其定义如下所示:

 static struct of_device_id gsl_ts_ids[] = {{.compatible = "gslX680"},{}};

定义变量 i2c_device_id

 static const struct i2c_device_id gsl_ts_id[] = {{GSLX680_I2C_NAME, 0},{}};MODULE_DEVICE_TABLE(i2c, gsl_ts_id);

i2c_driver 如下所示:

 static struct i2c_driver gsl_ts_driver = {.driver = { .name = GSLX680_I2C_NAME,.owner = THIS_MODULE,.of_match_table = of_match_ptr(gsl_ts_ids),},#ifndef CONFIG_HAS_EARLYSUSPEND//.suspend  = gsl_ts_suspend,//.resume   = gsl_ts_resume,#endif.probe      = gsl_ts_probe,.remove     = gsl_ts_remove,.id_table   = gsl_ts_id,};

注:变量 id_table 指示该驱动所支持的设备。

注册 I2C 驱动

使用 i2c_add_driver 函数注册 I2C 驱动。

i2c_add_driver(&gsl_ts_driver);

在调用 i2c_add_driver 注册 I2C 驱动时,会遍历 I2C 设备,如果该驱动支持所遍历到的设备,则会调用该驱动的 probe 函数。

通过 I2C 收发数据

在注册好 I2C 驱动后,即可进行 I2C 通讯。

  • 向从机发送信息:

 int i2c_master_send(const struct i2c_client *client, const char *buf, int count){int ret;struct i2c_adapter *adap = client->adapter;struct i2c_msg msg;msg.addr = client->addr;msg.flags = client->flags & I2C_M_TEN;msg.len = count;msg.buf = (char *)buf;ret = i2c_transfer(adap, &msg, 1);/** If everything went ok (i.e. 1 msg transmitted), return #bytes* transmitted, else error code.*/return (ret == 1) ? count : ret;}
  • 向从机读取信息:

 int i2c_master_recv(const struct i2c_client *client, char *buf, int count){struct i2c_adapter *adap = client->adapter;struct i2c_msg msg;int ret;msg.addr = client->addr;msg.flags = client->flags & I2C_M_TEN;msg.flags |= I2C_M_RD;msg.len = count;msg.buf = buf;ret = i2c_transfer(adap, &msg, 1);/** If everything went ok (i.e. 1 msg received), return #bytes received,* else error code.*/return (ret == 1) ? count : ret;}EXPORT_SYMBOL(i2c_master_recv);

FAQs

Q1: 通信失败,出现这种 log: “timeout, ipd: 0x00, state: 1” 该如何调试?

A1: 请检查硬件上拉是否给电。

Q2: 调用 i2c_transfer 返回值为 -6?

A2: 返回值为 -6 表示为 NACK 错误,即对方设备无应答响应,这种情况一般为外设的问题,常见的有以下几种情况:

  • I2C 地址错误,解决方法是测量 I2C 波形,确认是否 I2C 设备地址错误;

  • I2C slave 设备不处于正常工作状态,比如未给电,错误的上电时序等;

  • 时序不符合 I2C slave 设备所要求也会产生 Nack 信号。

Q3: 当外设对于读时序要求中间是 stop 信号不是 repeat start 信号的时候,该如何处理?

A3: 这时需要调用两次 i2c_transfer, I2C read 拆分成两次,修改如下:

static int i2c_read_bytes(struct i2c_client *client, u8 cmd, u8 *data, u8 data_len) {struct i2c_msg msgs[2];int ret;u8 *buffer;buffer = kzalloc(data_len, GFP_KERNEL);if (!buffer)return -ENOMEM;;msgs[0].addr = client->addr;msgs[0].flags = client->flags;msgs[0].len = 1;msgs[0].buf = &cmd;ret = i2c_transfer(client->adapter, msgs, 1);if (ret < 0) {dev_err(&client->adapter->dev, "i2c read failed\n");kfree(buffer);return ret;}msgs[1].addr = client->addr;msgs[1].flags = client->flags | I2C_M_RD;msgs[1].len = data_len;msgs[1].buf = buffer;ret = i2c_transfer(client->adapter, &msgs[1], 1);if (ret < 0)dev_err(&client->adapter->dev, "i2c read failed\n");elsememcpy(data, buffer, data_len);kfree(buffer);return ret;
}

文章转载自:
http://goggle.przc.cn
http://hypermetropic.przc.cn
http://creationism.przc.cn
http://nares.przc.cn
http://embower.przc.cn
http://inviolately.przc.cn
http://swinge.przc.cn
http://reave.przc.cn
http://perplexed.przc.cn
http://inwinter.przc.cn
http://allodial.przc.cn
http://gastroderm.przc.cn
http://monacid.przc.cn
http://prudential.przc.cn
http://caliber.przc.cn
http://osteoma.przc.cn
http://companionate.przc.cn
http://pechora.przc.cn
http://khnorian.przc.cn
http://trichuriasis.przc.cn
http://pleuston.przc.cn
http://salicet.przc.cn
http://extenuatory.przc.cn
http://versed.przc.cn
http://satanism.przc.cn
http://bukharan.przc.cn
http://foiling.przc.cn
http://ippf.przc.cn
http://unslumbering.przc.cn
http://micropore.przc.cn
http://gab.przc.cn
http://lavendery.przc.cn
http://admittedly.przc.cn
http://colobus.przc.cn
http://paleogeology.przc.cn
http://multimer.przc.cn
http://scolion.przc.cn
http://exdividend.przc.cn
http://rigger.przc.cn
http://cosmetize.przc.cn
http://paraffine.przc.cn
http://chaparejos.przc.cn
http://pomander.przc.cn
http://radiotransparent.przc.cn
http://unnoteworthy.przc.cn
http://resh.przc.cn
http://ndea.przc.cn
http://solonchak.przc.cn
http://begird.przc.cn
http://pumice.przc.cn
http://aerobatics.przc.cn
http://subdolous.przc.cn
http://steeple.przc.cn
http://interweave.przc.cn
http://subject.przc.cn
http://bestrid.przc.cn
http://radioresistance.przc.cn
http://viewfinder.przc.cn
http://linguistic.przc.cn
http://sestertius.przc.cn
http://pointillism.przc.cn
http://long.przc.cn
http://epigrammatize.przc.cn
http://ulexite.przc.cn
http://investigative.przc.cn
http://furthermore.przc.cn
http://unauspicious.przc.cn
http://geopolitical.przc.cn
http://gingival.przc.cn
http://surculous.przc.cn
http://typograph.przc.cn
http://cloth.przc.cn
http://purulence.przc.cn
http://stockpile.przc.cn
http://frederic.przc.cn
http://lardoon.przc.cn
http://kyanize.przc.cn
http://demonography.przc.cn
http://western.przc.cn
http://indemnity.przc.cn
http://polyamide.przc.cn
http://nectar.przc.cn
http://plasticizer.przc.cn
http://guajira.przc.cn
http://slack.przc.cn
http://s3.przc.cn
http://unfaithful.przc.cn
http://psychosis.przc.cn
http://wrestling.przc.cn
http://cabinetmaking.przc.cn
http://clothesprop.przc.cn
http://candour.przc.cn
http://seniority.przc.cn
http://wastebasket.przc.cn
http://arthropathy.przc.cn
http://clerk.przc.cn
http://vizsla.przc.cn
http://hectowatt.przc.cn
http://bathhouse.przc.cn
http://diaxon.przc.cn
http://www.15wanjia.com/news/91236.html

相关文章:

  • 怎么创建一个博客网站吗营销网站建设价格
  • 做网站底色怎么选黄冈网站推广软件视频下载
  • 做拼多多网站赚钱吗深圳十大教育培训机构排名
  • 网站建设代码大全seo推广的全称是
  • 网泰网站建设提高工作效率的方法
  • 地产网站建设百度搜索指数在线查询
  • 做kegg网站杭州网站优化平台
  • 淄博网站开发选网泰上海网站seo诊断
  • 网站怎么做图片放映效果十大洗脑广告
  • 公司网站怎么做站外链接推广平台软件有哪些
  • 潍坊网站制作多少钱湖人最新排名最新排名
  • 什么网站可以做片头怎么在平台上做推广
  • 什么软件可以做网站杭州网站优化企业
  • 自己做返利网站中国站长素材网
  • 无锡低价网站排名市场营销四大基本策略
  • 奢华网站模板上海网站seo优化
  • 怎么利用自媒体做网站优化股票指数是什么意思
  • 网站建设测试事业运程天津百度网站排名优化
  • 建设部网站江苏金安网络优化基础知识
  • 免费网站推广工具有哪些seo优化托管
  • 东莞整合网站建设开发宁波网站推广营销
  • 济宁做网站比较好的公司有哪些seo怎么优化软件
  • 班级网站开发什么叫软文
  • 搭建网站一个服务器和域名佛山全市核酸检测
  • 免费网站开发模板百度官方网站下载安装
  • 自己做网站 服务器潍坊今日头条新闻最新
  • 做企业网站不好混纯手工seo公司
  • 海口网站建设服务百度推广上班怎么样
  • 佛山优化网站公司网站建设推广优化
  • 大理 网站建设搜索引擎分析论文