全志R16平台SPI0接口的验证V1.1(分色排版)
来源:互联网 发布:ubuntu syslog 配置 编辑:程序博客网 时间:2024/05/22 15:00
全志R16平台SPI0接口的验证
2017/10/20 16:50
版本:V1.1
1、确定driver的name为spidev:
Q:\r16_tinav2.1\spi_csdn_tinav2.1\lichee\linux-3.4\drivers\spi\spidev.c
static struct spi_driver spidev_spi_driver = {
.driver = {
.name ="spidev",
.owner = THIS_MODULE,
},
.probe = spidev_probe,
.remove = __devexit_p(spidev_remove),
/* NOTE: suspend/resume methods are not necessary here.
* We don't do anything except pass the requests to/from
* the underlying controller. The refrigerator handles
* most issues; the controller driver handles the rest.
*/
};
2、打开spi0,定义spi_dev_num的数量大于1,定义spi_board0的modalias为spidev(必须和驱动保持一致):
Q:\r16_tinav2.1\spi_csdn_tinav2.1\target\allwinner\astar-parrot\configs\sys_config.fex
;----------------------------------------------------------------------------------
;SPI controller configuration
;spi_used = SPIx enable
;spi_cs_bitmap = SPI bit mapping
;----------------------------------------------------------------------------------
[spi0]
spi_used = 1
spi_cs_bitmap = 1
spi_mosi = port:PC00<3><default><default><default>
spi_miso = port:PC01<3><default><default><default>
spi_sclk = port:PC02<3><default><default><default>
spi_cs0 = port:PC03<3><1><default><default>
[spi1]
spi_used = 0
spi_cs_bitmap = 1
spi_cs0 = port:PA00<2><1><default><default>
spi_sclk = port:PA01<2><default><default><default>
spi_mosi = port:PA02<2><default><default><default>
spi_miso = port:PA03<2><default><default><default>
;----------------------------------------------------------------------------------
;SPI device configuration
;spi_dev_num: number of spi devices
;----------------------------------------------------------------------------------
[spi_devices]
spi_dev_num = 1
;----------------------------------------------------------------------------------
;[spi_board0] spi device configuration
;modalias = spi device name
;sflash_size = spi flash size, optional, if spi_board0 is nor flash , carefully
;max_speed_hz = max transfer speed
;bus_num = bus ID
;chip_select = chip select, 0,1
;mode = SPI transfer mode
;----------------------------------------------------------------------------------
[spi_board0]
;modalias = "at25df641"
modalias = "spidev"
sflash_size = 32
max_speed_hz = 50000000
bus_num = 0
chip_select = 0
mode = 0
3、原始编译:
rootroot@cm-System-Product-Name:/home/rediron/r16_tinav2.1$ tar zxvf r16_tinav2.1_csdn_20170901_1040.tar.gz
rootroot@cm-System-Product-Name:/home/rediron/r16_tinav2.1$
rootroot@cm-System-Product-Name:/home/rediron/r16_tinav2.1$ mv tina spi_csdn_tinav2.1
rootroot@cm-System-Product-Name:/home/rediron/r16_tinav2.1$
rootroot@cm-System-Product-Name:/home/rediron/r16_tinav2.1$ cd spi_csdn_tinav2.1/
rootroot@cm-System-Product-Name:/home/rediron/r16_tinav2.1/spi_csdn_tinav2.1$
rootroot@cm-System-Product-Name:/home/rediron/r16_tinav2.1/spi_csdn_tinav2.1$ source build/envsetup.sh
rootroot@cm-System-Product-Name:/home/rediron/r16_tinav2.1/spi_csdn_tinav2.1$ lunch
30. astar_parrot-tina
Which would you like?30
rootroot@cm-System-Product-Name:/home/rediron/r16_tinav2.1/spi_csdn_tinav2.1$ make -j12
rootroot@cm-System-Product-Name:/home/rediron/r16_tinav2.1/spi_csdn_tinav2.1$ pack -d
刷机之后:
root@TinaLinux:/#
root@TinaLinux:/# find . -name spi*
./proc/irq/97/spi0
./sys/bus/spi
./sys/bus/spi/devices/spi0.0
./sys/bus/platform/devices/spi.0
./sys/bus/platform/drivers/spi
./sys/bus/platform/drivers/spi/spi.0
./sys/devices/platform/spi.0
./sys/devices/platform/spi.0/spi_master
./sys/devices/platform/spi.0/spi_master/spi0
./sys/devices/platform/spi.0/spi_master/spi0/spi0.0
./sys/class/spi_master
./sys/class/spi_master/spi0
./sys/kernel/debug/clk/hosc/pll_periph/pll_periphahb1/ahb1/spinlock
./sys/kernel/debug/clk/hosc/pll_periph/spi0
./sys/kernel/debug/clk/hosc/spi1
root@TinaLinux:/#
4、在内核中打开SPI(生成设备节点/dev/spidev0.0):
rootroot@cm-System-Product-Name:/home/rediron/r16_tinav2.1/spi_csdn_tinav2.1$ make kernel_menuconfig
Device Drivers --->
[*] SPI support --->
< > User mode SPI device driver support
修改为:
<*> User mode SPI device driver support
rootroot@cm-System-Product-Name:/home/rediron/r16_tinav2.1/spi_csdn_tinav2.1$ make -j12
rootroot@cm-System-Product-Name:/home/rediron/r16_tinav2.1/spi_csdn_tinav2.1$ pack -d
(有兴趣的可以看看增加了哪些东西!)
root@TinaLinux:/# find . -name spi*
./dev/spidev0.0
./proc/irq/97/spi0
./sys/bus/spi
./sys/bus/spi/devices/spi0.0
./sys/bus/spi/drivers/spidev
./sys/bus/spi/drivers/spidev/spi0.0
./sys/bus/platform/devices/spi.0
./sys/bus/platform/drivers/spi
./sys/bus/platform/drivers/spi/spi.0
./sys/devices/platform/spi.0
./sys/devices/platform/spi.0/spi_master
./sys/devices/platform/spi.0/spi_master/spi0
./sys/devices/platform/spi.0/spi_master/spi0/spi0.0
./sys/devices/platform/spi.0/spi_master/spi0/spi0.0/spidev
./sys/devices/platform/spi.0/spi_master/spi0/spi0.0/spidev/spidev0.0
./sys/class/spi_master
./sys/class/spi_master/spi0
./sys/class/spidev
./sys/class/spidev/spidev0.0
./sys/kernel/debug/clk/hosc/pll_periph/pll_periphahb1/ahb1/spinlock
./sys/kernel/debug/clk/hosc/pll_periph/spi0
./sys/kernel/debug/clk/hosc/spi1
./sys/module/spidev
root@TinaLinux:/#
root@TinaLinux:/#
5、增加SPI的测试验证程序(spidev_test.c):
rootroot@cm-System-Product-Name:/home/rediron/r16_tinav2.1/spi_csdn_tinav2.1$
rootroot@cm-System-Product-Name:/home/rediron/r16_tinav2.1/spi_csdn_tinav2.1$ find . -name spidev_test.c
./lichee/linux-3.4/Documentation/spi/spidev_test.c
rootroot@cm-System-Product-Name:/home/rediron/r16_tinav2.1/spi_csdn_tinav2.1$
请严重注意:测试应用程序的名字不能叫:spidev_test。感觉是tinav2.1的SDK自动过滤掉了spidev_test这个应用程序名!
不过叫spidev_test0还是可以的!^_
W:\spi_csdn_tinav2.1\package\allwinner\spidev_test0\Makefile
W:\spi_csdn_tinav2.1\package\allwinner\spidev_test0\src\Makefile
(spidev_test0.c这个就是lichee/linux-3.4/Documentation/spi/spidev_test.c,不过需要根据实际修改设备节点!)
默认为:static const char *device = "/dev/spidev1.1";
请改为:static const char *device = "/dev/spidev0.0";
W:\spi_csdn_tinav2.1\package\allwinner\spidev_test0\src\spidev_test0.c
static const char *device = "/dev/spidev0.0";
static uint8_t mode;
static uint8_t bits = 8;
static uint32_t speed = 500000;
static uint16_t delay;
static void transfer(int fd)
{
int ret;
//uint8_t tx[] = {
//0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
//0x40, 0x00, 0x00, 0x00, 0x00, 0x95,
//0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
//0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
//0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
//0xDE, 0xAD, 0xBE, 0xEF, 0xBA, 0xAD,
//0xF0, 0x0D,
//};
// CityBrand WelCome U!
uint8_t tx[] = {
0x43, 0x69, 0x74, 0x79, 0x42, 0x72, 0x61, 0x6E, 0x64, 0x20,
0x57, 0x65, 0x6C, 0x43, 0x6F, 0x6D, 0x65, 0x20, 0x55, 0x21,
0x43, 0x69, 0x74, 0x79, 0x42, 0x72, 0x61, 0x6E, 0x64, 0x20,
0x57, 0x65, 0x6C, 0x43, 0x6F, 0x6D, 0x65, 0x20, 0x55, 0x21,
0x43, 0x69, 0x74, 0x79, 0x42, 0x72, 0x61, 0x6E, 0x64, 0x20,
0x57, 0x65, 0x6C, 0x43, 0x6F, 0x6D, 0x65, 0x20, 0x55, 0x21,
};
uint8_t rx[ARRAY_SIZE(tx)] = {0, };
struct spi_ioc_transfer tr = {
.tx_buf = (unsigned long)tx,
.rx_buf = (unsigned long)rx,
.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");
for (ret = 0; ret < ARRAY_SIZE(tx); ret++) {
//if (!(ret % 6))
//puts(" ");
//printf("%.2X ", rx[ret]);
if (!(ret % 20)){
puts("\n");
}
printf("%c", rx[ret]);
}
//puts("");
puts("\n");
puts("\n");
puts("\n");
}
rootroot@cm-System-Product-Name:/home/rediron/r16_tinav2.1/spi_csdn_tinav2.1$ make menuconfig
Allwinner --->
< > spidev_test0.................... spidev_test0 just test the SPI interface (NEW)
修改为:
<*> spidev_test0.................... spidev_test0 just test the SPI interface
rootroot@cm-System-Product-Name:/home/rediron/r16_tinav2.1/spi_csdn_tinav2.1$ make -j12
rootroot@cm-System-Product-Name:/home/rediron/r16_tinav2.1/spi_csdn_tinav2.1$ pack -d
开发板:SC3817R。
请将开发板上的U8引脚上的第2脚(SPI0-MISO)和第5脚(SPI0-MOSI)通过1k欧姆的电阻连接在一起!(不建议直连,阻值可以根据实际情况灵活决定!)
[ 15.706372] xt_time: kernel timezone is -0000
[ 16.581894] android_usb gadget: high-speed config #1: android
BusyBox v1.24.1 () built-in shell (ash)
_____ _ __ _
|_ _||_| ___ _ _ | | |_| ___ _ _ _ _
| | _ | || | | |__ | || || | ||_'_|
| | | || | || _ | |_____||_||_|_||___||_,_|
|_| |_||_|_||_|_| Tina is Based on OpenWrt!
----------------------------------------------
Tina Linux (Neptune, 593A1793)
----------------------------------------------
root@TinaLinux:/#
root@TinaLinux:/# spidev_test0
spi mode: 0
bits per word: 8
max speed: 500000 Hz (500 KHz)
CityBrand WelCome U!
CityBrand WelCome U!
CityBrand WelCome U!
root@TinaLinux:/#
(验证通过!)
参考资料:
http://www.xuebuyuan.com/1345420.html
Linux2.6.32下SPI驱动的移植如下图所示:
http://blog.sina.com.cn/s/blog_6182b82201011s6j.html
基于S3C2440的Linux SPI驱动移植笔记
- 全志R16平台SPI0接口的验证V1.1(分色排版)
- 全志R16平台SPI0接口的验证(分色排版)
- 全志R16平台的parrotv1.1系统的编译手册(分色排版)V1.0
- 全志R16平台调通RTL8189ES的步骤v1.1(分色排版)android4.4.2
- 全志R16平台的Android6系统下调通rtl8189es(分色排版)V1.1
- 全志R16平台的Android6系统下调通rtl8189es(分色排版)V1.0
- 全志R16调通USB接口的WIFI:RTL8188CU(分色排版)V1.0版本
- 全志R16平台的parrotv1.1的系统点亮OV5640(分色排版)版本V1.2
- 在全志R16平台的tinav2.1系统下点亮客户的RGB屏幕V1.0(分色排版)
- 全志R16的android4.4.2平台点亮gc2145(evb30)版本:V1.1(分色排版)
- 如何调整全志R16平台在tinav2.1下的频率V1.0(分色排版)
- 通过全志R16平台TINAV2.1下的LCD显示BMP图片(分色排版)V1.0版本
- 原始编译全志R16的androidM的步骤(分色排版)V1.1
- 全志R16调通AP6181(分色排版)V1.0
- 全志R16平台的tinav2.1的系统和parrot v1.1的内核的合成(分色排版)V1.0
- 全志R16平台的android6.0.1系统下的RTL8188EU的配置V1.0(分色排版)
- 全志R16平台的android6.0.1系统下的RTL8188EU的配置(分色排版)V1.0
- 全志R16平台编译linux系统V1.0(分色排版)
- git常用命令总结
- 切分表达式——写个tokenizer吧
- upD79F8513A(NEC)或upD78F0511A(NEC)之AD采样
- Wireshark抓包示例
- 100多个基础常用JS函数和语法集合大全
- 全志R16平台SPI0接口的验证V1.1(分色排版)
- eGovResSysDB-delete语句
- redis服务以及phpredis扩展的安装
- 全排列
- 看完让你彻底搞懂Websocket原理
- lariagon 集成环境使用
- python-@装饰器
- 页面自适应方法
- luogu1412 经营与开发