0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创信息技术EM9280 Linux SPI驱动简介

英创信息技术 来源:英创信息技术 作者:英创信息技术 2020-01-16 09:24 次阅读

1、简述

SPI(Synchronous Peripheral Interface)是一种同步串行数据通讯总线接口,常用于连接ADCs、EPROMs、Sensors或者是其他一些微控制器,SPI具有两种工作模式:master和slave模式,其中master模式提供时钟信号

EM9280提供的SPI驱动支持master模式,该SPI接口为四线制SPI,包括:时钟CLK、数据MISO (master in, slave out)、数据 MOSI (master out, slave in)、片选CS。SPI管脚和GPIO28-GPIO31复用。具体的管脚定义请参见《EM9280工控主板数据手册》相关章节。

本文将介绍EM9280如何实现SPI设备驱动(spi-dev)以及如何使用spi-dev。

2、Linux内核配置

内核配置中增加以下选项(make menuconfig):

Device Drivers ---> SPI
Device Drivers ---> SPI ---> Freescale MXS SPI/SSP Controller
Device Drivers ---> SPI ---> User mode SPI device driver support

增加对SPI板卡一级的支持,在arch/arm/mach-mx28/board-em9280.c定义:

static struct spi_board_info spi_board_info[] __initdata = {
{
.modalias = 'spidev',
.chip_select = 0,
.max_speed_hz = 12 * 1000 * 1000,
.bus_num = 1,
.mode = SPI_MODE_3,
},
};

spi_register_board_info( spi_board_info, ARRAY_SIZE(spi_board_info)); )); 注册spi_board_info。这个代码会把spi_board_info注册要链表board_list上, 然后spi_master的注册会在spi_register_board_info之后,spi_master注册的过程中会调用scan_boardinfo扫描board_list,找到挂接在它上面的spi设备,然后创建并注册spi_device。这样EM9280在系统启动完成后SPI所对应的设备节点为:“/dev/spidev1.0”。

3、spi-dev的使用

SPI常用四种数据传输模式,主要差别在于:输出串行同步时钟极性(CPOL)和相位(CPHA)可以进行配置。如果CPOL= 0,串行同步时钟的空闲状态为低电平;如果CPOL= 1,串行同步时钟的空闲状态为高电平。如果CPHA= 0,在串行同步时钟的前沿(上升或下降)数据被采样;如果CPHA = 1,在串行同步时钟的后沿(上升或下降)数据被采样。对于SPI模式的定义如下表1:

SPI Mode CPOL CPHA
0 0 0
1 0 1
2 1 0
3 1 1

应用程序可以通过read()、write()、ioctl()函数使用spi-dev驱动,在EM9280中SPI是半双工模式,最高波特率为12Mbps, 所以选择调用read/write函数进行数据通讯,而ioctl()函数仅仅用于对于SPI通讯参数的设置。如:

static const char *device = '/dev/spidev1.0';
static uint8_t mode = 3;
static uint8_t bits = 8;
static uint32_t speed = 1000000;
int main( int argc, char *argv[] )
{
int i, fd;
int ret = 0;
char wr_buf[]={ 0xff,0x00,0x1f,0x0f,0xff,0x00,0x1f,0x0f, 0xff,0x00 };
char rd_buf[10];
fd = open(device, O_RDWR);
if (fd < 0)
pabort('can't open device');
// 设置 spi mode,其定义参见表1
ret = ioctl(fd, SPI_IOC_WR_MODE, &mode);
if (ret == -1)
pabort('can't set spi mode');
ret = ioctl(fd, SPI_IOC_RD_MODE, &mode);
if (ret == -1)
pabort('can't get spi mode');
// 设置数据bit位
ret = ioctl(fd, SPI_IOC_WR_BITS_PER_WORD, &bits);
if (ret == -1)
pabort('can't set bits per word');
ret = ioctl(fd, SPI_IOC_RD_BITS_PER_WORD, &bits);
if (ret == -1)
pabort('can't get bits per word');
// 设置SPI通讯波特率
ret = ioctl(fd, SPI_IOC_WR_MAX_SPEED_HZ, &speed);
if (ret == -1)
pabort('can't set max speed hz');
ret = ioctl(fd, SPI_IOC_RD_MAX_SPEED_HZ, &speed);
if (ret == -1)
pabort('can't get max speed hz');
printf('spi mode: %d\n', mode);
printf('bits per word: %d\n', bits);
printf('max speed: %d Hz (%d KHz)\n', speed, speed/1000);
if( write(fd, wr_buf, ARRAY_SIZE(wr_buf)) != ARRAY_SIZE(wr_buf))
perror('Write Error');
if( read(fd, rd_buf, ARRAY_SIZE(rd_buf)) != ARRAY_SIZE(rd_buf) )
perror('Read Error');
else
{
for (i=0; i<(int)ARRAY_SIZE(rd_buf);i++) 
{
printf('0x%02X ', rd_buf[i]);
if (i%2)
printf('\n');
}
}
close(fd);

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11310

    浏览量

    209597
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6085

    浏览量

    35357
收藏 人收藏

    评论

    相关推荐

    飞腾助力首届教育信息技术应用创新大赛圆满落幕

    近日,由中国教育技术协会主办,教育部教育管理信息中心教育信实验室、公安部第三研究所、中国电子工业标准化技术协会信工委会支持,北京航空航天
    的头像 发表于 12-24 09:57 121次阅读

    有方科技参编的信息技术团体标准发布

    近日,有方科技参编的《信息技术产品供应链成熟度 共性指标 第1部分:企业背景评价》《信息技术产品供应链成熟度 共性指标 第2部分:技术掌控评价》《信息技术产品供应链成熟度 共性指标 第
    的头像 发表于 12-23 10:44 138次阅读

    龙芯中科助力2024首届教育信息技术应用创新大赛成功举办

    近日,2024首届教育信息技术应用创新大赛在北京航空航天大学成功举办。本次大赛由中国教育技术协会主办,教育信实验室、公安部第三研究所、中国电子工业标准化技术协会信
    的头像 发表于 12-19 17:02 233次阅读

    拓维信息参与牵头组建!长沙新一代信息技术产教联合体正式获批

    的长沙新一代信息技术产教联合体成功获批,为长沙市信息技术产业发展注入了新的活力。图/《2024年长沙市市级市域产教联合体名单》长沙新一代信息技术产教联合体将依托龙头企
    的头像 发表于 12-07 01:06 369次阅读
    拓维<b class='flag-5'>信息</b>参与牵头组建!长沙新一代<b class='flag-5'>信息技术</b>产教联合体正式获批

    嵌入式工程师都在找的【Linux内核调试技术】建议收藏!

    ,我们可以定位到导致系统不稳定的具体代码位置。然后,根据这些信息对内核代码进行修复和优化。 调试结果经过上述调试过程,我们发现SPI控制器驱动中存在一个竞态条件,导致在数据传输过程中出现了数据错乱
    发表于 11-28 15:37

    中科达荣获2024年软件和信息技术服务优秀企业

    及前百家企业”名单。中科达凭借非凡的技术实力与持续的创新能力,成功入选“2024年度软件和信息技术服务竞争力百强企业”以及“2024年软件和信息技术服务优秀企业”。
    的头像 发表于 10-30 11:44 487次阅读

    国产化背景下的工控主板发展现状

    ,是信息技术应用创新产业的简称,于2016年“信工委会”(信息技术应用创新工作委员会)提出,目的就是要推动我们国内软硬件关键技术的研发
    的头像 发表于 09-21 16:15 410次阅读

    加速鲲鹏落地!拓维信息迁移工具荣获鲲鹏原生开发技术认证

    认证。图/拓维·数据库适配中间件取得鲲鹏原生开发N认证在数字化时代的大潮中,信战略作为国家推动信息技术应用创新、保障信息安全与自主可控的关键举措,其重要性日益凸显
    的头像 发表于 09-10 08:03 449次阅读
    加速鲲鹏落地!拓维<b class='flag-5'>信息</b>信<b class='flag-5'>创</b>迁移工具荣获鲲鹏原生开发<b class='flag-5'>技术</b>认证

    梯度科技入选2023年信息技术应用创新解决方案名单

    日前,工业和信息化部网络安全产业发展中心(工业和信息化部信息中心)在天津举办2024信息技术应用创新发展大会暨解决方案应用推广大会。会上正式公布了2023年
    的头像 发表于 09-09 16:29 434次阅读

    中软国际信服务助力大连信产业发展

    为进一步激发大连本地信产业生态的活力与潜力,搭建一个高效、开放的交流平台。由大连软件行业协会携手大连市信息技术应用创新综合服务中心主办,中软国际协办的,2024年大连市信息技术应用创新产业发展大会
    的头像 发表于 08-27 16:49 885次阅读

    翼辉信息入选2023年信息技术应用创新解决方案名单

    近日,2023 年(第五届)信息技术应用创新解决方案公布遴选名单,历经资格初审、技术中评、区域评议、终评预审,翼辉以“面向工业领域嵌入式操作系统 SylixOS 解决方案”,成功在全国优秀方案中脱颖而出,入选典型解决方案名单。
    的头像 发表于 04-28 11:37 561次阅读
    翼辉<b class='flag-5'>信息</b>入选2023年<b class='flag-5'>信息技术</b>应用创新解决方案名单

    龙芯中科三项信方案入围工信部2023年信息技术应用创新应用示范案例名单

    近日,工业和信息化部通报了2023年信息技术应用创新解决方案征集遴选结果,本次共评选出典型解决方案173个、应用示范案例83个、单项创新案例64个。
    的头像 发表于 03-07 16:45 945次阅读
    龙芯中科三项信<b class='flag-5'>创</b>方案入围工信部2023年<b class='flag-5'>信息技术</b>应用创新应用示范案例名单

    RX78M组 EtherCAT ETG.5003示例程序固件信息技术

    电子发烧友网站提供《RX78M组 EtherCAT ETG.5003示例程序固件信息技术.pdf》资料免费下载
    发表于 02-21 14:22 1次下载
    RX78M组  EtherCAT ETG.5003示例程序固件<b class='flag-5'>信息技术</b>

    软通动力与捷技术签订战略合作协议

    近日,软通动力信息技术(集团)股份有限公司(以下简称“软通动力”)与宁波捷技术股份有限公司(以下简称“捷技术”)正式签订战略合作协议,并
    的头像 发表于 02-03 16:35 1122次阅读

    PCB企业力三期项目顺利投产

    近日,PCB企业四川力电子科技股份有限公司三期(载板厂和特种板厂)顺利投产。通过这个项目,力公司成功地将业务范围从单一的普通通孔多层板扩展到了高端的IC载板、MiniLED基板
    的头像 发表于 01-15 14:20 625次阅读