天嵌 ARM开发社区

 找回密码
 注册
查看: 4572|回复: 8

关于spi设备的读写

[复制链接]
cain 发表于 2013-12-2 14:42:47 | 显示全部楼层 |阅读模式
本帖最后由 cain 于 2013-12-2 15:13 编辑

目前TQ3358开发板上留有spi硬件接口,但没有相关的软件示例,
参照网上的示例做不成功,应该怎么弄?
      
   我添加的例子是这样的:
                    1,引脚配置
      static struct pinmux_config spi1_pin_mux[] = {
        {"mcasp0_aclkx.spi1_sclk", OMAP_MUX_MODE3 |AM33XX_PULL_ENBL
                | AM33XX_INPUT_EN},
        {"mcasp0_fsx.spi1_d0", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL
                | AM33XX_INPUT_EN},
        {"mcasp0_axr0.spi1_d1", OMAP_MUX_MODE3 |AM33XX_PULL_ENBL | AM33XX_PULL_UP
                | AM33XX_INPUT_EN},
        {"rmii1_refclk.spi1_cs0", OMAP_MUX_MODE2 |AM33XX_PULL_ENBL| AM33XX_PULL_UP
                | AM33XX_INPUT_EN},
        {NULL, 0},
};
                  2,定义sp1 slave设备
  static struct spi_board_info am335x_spi1_slave_info2[] = {
        {
                .modalias = "spidev",
                .max_speed_hz = 12000000, // 12Mbps
                .bus_num = 2,
                .chip_select = 0,
                .mode = SPI_MODE_1,
        },
};
               3,初始化设备
/* setup spi0 */
static void spi1_init(int evm_id, int profile)
{
        setup_pin_mux(spi1_pin_mux);
        spi_register_board_info(am335x_spi0_slave_info2,
                        ARRAY_SIZE(am335x_spi0_slave_info2));
        return;
}
               
                4,执行测试
                   /spidev_test -D /dev/spidev2.0 -H
                           chip_select 一直是高电平, data1和clk 一直是低电平,没有反应
                  

Calvin 发表于 2013-12-2 14:58:41 | 显示全部楼层
你说的是应用程序吗?你可以参考一下内核源码目录下的Documentation/spi/spidev_test.c
回复

使用道具 举报

 楼主| cain 发表于 2013-12-2 15:10:40 | 显示全部楼层
参考过了,其中的transfer函数如下,main()函数会调用transfer,但cs,data,clk电平都没任何变化
   static void transfer(int fd)
{
        int ret;
        
        uint8_t tx[] = {
                0x90,0x09
        };

        struct spi_ioc_transfer tr = {
                .tx_buf = (unsigned long)tx,
                .len = ARRAY_SIZE(tx),
                .delay_usecs = delay,
                .speed_hz = speed,
                .bits_per_word = bits,
        };

        ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);
        if (ret < 1)
                pabort("can't send spi message");

}
     
回复

使用道具 举报

Calvin 发表于 2013-12-2 16:12:07 | 显示全部楼层
cain 发表于 2013-12-2 15:10
参考过了,其中的transfer函数如下,main()函数会调用transfer,但cs,data,clk电平都没任何变化
   static  ...

那因为我们没有提供SPI驱动,你需要自己写驱动
回复

使用道具 举报

天嵌技术支持01 发表于 2013-12-2 18:28:50 | 显示全部楼层
cain 发表于 2013-12-2 15:10
参考过了,其中的transfer函数如下,main()函数会调用transfer,但cs,data,clk电平都没任何变化
   static  ...

驱动部分需要自己适配
回复

使用道具 举报

 楼主| cain 发表于 2013-12-5 14:29:03 | 显示全部楼层
我跟踪到寄存器的读写,最后往TX0寄存器写的指令都执行了,但输出没反应cs ,clk ,data 都没变化
可能给些提示,哪个环节容易出问题?
回复

使用道具 举报

Calvin 发表于 2013-12-9 11:41:36 | 显示全部楼层
cain 发表于 2013-12-5 14:29
我跟踪到寄存器的读写,最后往TX0寄存器写的指令都执行了,但输出没反应cs ,clk ,data 都没变化
可能给些 ...

你先把时钟源搞清楚,之后再详细看下CPU手册SPI的相关章节,最好读它几遍
回复

使用道具 举报

sunny90 发表于 2013-12-12 10:54:18 | 显示全部楼层
你好!请问你是在android下读写spi设备吗?
回复

使用道具 举报

 楼主| cain 发表于 2013-12-13 16:17:37 | 显示全部楼层
sunny90 发表于 2013-12-12 10:54
你好!请问你是在android下读写spi设备吗?

是的,想做到这一点
和linux下读写spi设备相同
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2025-5-1 03:24 , Processed in 2.045113 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表