spi学习总结:
- 首先要明白SPI的几种模式,并且要明白spi的pol极性和PHA相位是由从机决定的。模式参考https://www.cnblogs.com/adylee/p/5399742.html
- 我做的这个是基于xmc4800的spi主从通信,基本思路是,根据时序图,用GPIO拉高拉低引脚,控制时序,要么加delay_loop,然后拉低cs,主发送数据,清空FIFO,打开FIFO,使能FIFO大小,然后从机把数据发送到缓存里,读出来就行了。
PCB学习总结:
1.我用的pcb 软件:www.pcbs.com
2.download pcbs view.包括激活码,下载连接。
3.用法是,打开PCBS -> tool -> open layout. select pin,线路等等自己看吧!
BeagleBoard x-15: spi
SPI_IOC_RD_MODE:读取spi_device的mode。
SPI_IOC_RD_LSB_FIRST:如果是SPI_LSB_FIRST的方式则返回1。
SPI_IOC_RD_BITS_PER_WORD:读取spi_device的bits_per_word.
SPI_IOC_RD_MAX_SPEED_HZ:读取spi_device的max_speed_hz.
SPI_IOC_WR_MODE:设置spi_device的mode,并调用spi_setup立即使设置生效。
SPI_IOC_WR_LSB_FIRST:设置spi使用SPI_LSB_FIRST的传输模式。立即生效。
SPI_IOC_WR_BITS_PER_WORD:读取字长。
SPI_IOC_WR_MAX_SPEED_HZ:设置时钟速率。
无论读取,用户传输的第三个参数都被当作缓冲地址指针。读取时存放结果,写入时存放要写的内容。
配置device tree
/lib/firmware看device tree source.dts
linux GPIO
https://www.kernel.org/doc/Documentation/gpio/sysfs.txt
1.gpio_set_value(unsigned gpio, int value)用来设置gpio寄存器的值
2.gpio_direction_output(unsigned gpio, int value)用来设置gpio为输出功能,同时设置gpio输出的值。
一般来说,设置一个GPIO口为输出,先执行一次gpio_direction_output,然后接下来只需执行gpio_set_value就行了。
3.gpio_direction_input(unsigned gpio)用来设置gpio为输入功能
4.gpio_get_value(unsigned gpio)用来获取gpio口的输入的值;
5.在使用gpio口之前,先用gpio_request(unsigned gpio, const char* label)申请gpio口的使用,若申请成功,则说明该gpio口未被使用。
6.在使用完gpio口之后,用gpio_free(unsigned gpio)释放gpio口。
7.如何获取gpio口呢,可以查看内核中对应版型的相关文件,也可以自己进行计算,比如GPIOA1的gpio为1,GPIOB2为34。
8.gpio口的通用函数接口定义在gpiolib.c文件中,声明则在gpio.h中。
文件IO操控GPIO
https://blog.csdn.net/lell3538/article/details/51277870
https://blog.csdn.net/u010871058/article/details/65648593