@jingyan 您好请问 不支持全双工,是指只能用3线制才能实现bit-aligin传输吗 还是说四线制spi也支持bit-aligin传输 只是无法同时读写
wayneyao 发布的帖子
-
回复: 【T113-I】 请问该产品支持spi传输32bit数据吗
-
回复: 【T113-I】 请问该产品支持spi传输32bit数据吗
@jingyan : 您好 ,我已按照数据手册修改了bit-aligned相关部分寄存器BATC的值 0x40=0x012020a3,但仍未生效32bit传输,不知是否还需要配置其他寄存器,修改的部分在上面已上传。
-
回复: 【T113-I】 请问该产品支持spi传输32bit数据吗
@awwwwa
spi-sunxi.h spi-sunxi.c
以上是我稍作修改的spi-sunxi文件,
主要是做了以下三个地方的修改:
1:在.h文件当中将寄存器地址与t113的数据手册对齐:// #define SPI_BATC_REG (0x3C) /* Bit-Aligned transfer configure register */ // #define SPI_BACC_REG (0x40) /* Bit-Aligned clock configure register */ // #define SPI_TXBIT_REG (0x34) /* tx bit register */ // #define SPI_RXBIT_REG (0x48) /* rx bit register */ #define SPI_BATC_REG (0x40) /* Bit-Aligned transfer configure register */ #define SPI_BACC_REG (0x44) /* Bit-Aligned clock configure register */ #define SPI_TXBIT_REG (0x48) /* tx bit register */ #define SPI_RXBIT_REG (0x4c) /* rx bit register */ 2:在spi初始化阶段执行spi_config_batc(): static void spi_config_batc(u32 config, void __iomem *base_addr) { u32 reg_val = readl(base_addr + SPI_BATC_REG); // config &= ~SPI_BPW_MASK(8); // if (config) { reg_val |= 0x03; // reg_val |=(0x1 << 0); // reg_val |=(0x1 << 1); //设置成32位一帧 reg_val |= (32 << 8); reg_val |= (32 << 16); reg_val |= (0x1 << 24); // } writel(reg_val, base_addr + SPI_BATC_REG); }
3:在3033行对bits_per_word_mask 增加32bit的位掩码
master->bits_per_word_mask = SPI_BPW_MASK(8) | SPI_BPW_MASK(32);
非常感谢您的回复,以上便是我的全部修改,请问还有什么需要我去调整的地方吗 -
回复: 【T113-I】 请问该产品支持spi传输32bit数据吗
@awwwwa
以下是我的设备树修改:&spi1 { clock-frequency = <50000000>; // pinctrl-0 = <&spi1_pins_a &spi1_pins_b>; pinctrl-0 = <&spi1_pins_a>; pinctrl-1 = <&spi1_pins_c>; pinctrl-names = "default", "sleep"; spi_slave_mode = <0>; spi1_cs_number = <1>; spi1_cs_bitmap = <1>; status = "okay"; cs-gpios =<&pio PB 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; ,<&pio PB 12 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; /*nWKRQ RST nINT SCLK SDI SDO NCS PD4 PD5 PD6 PB11 PB10 PB9 PD10 PD7 PD8 PD9 PB11 PB10 PB9 PD11 */ tcan4551_0:tcan4551@0{ #address-cells=<1>; #size-cells=<1>; compatible = "ti,tcan4x5x"; reg = <0>; spi-max-frequency =<10000000>; bosch,mram-cfg = <0x0 0 0 32 0 0 1 1>; interrupt-parent = <&pio>; interrupts = <DP 6 IRQ_TYPE_LEVEL_HIGH>; device-wake-gpios = <&pio PD 4 GPIO_ACTIVE_HIGH>; reset-gpios = <&pio PD 5 GPIO_ACTIVE_LOW>; }; tcan4551_2:tcan4552@0{ #address-cells=<1>; #size-cells=<1>; compatible = "ti,tcan4x5x"; reg = <0>; spi-max-frequency =<10000000>; bosch,mram-cfg = <0x0 0 0 32 0 0 1 1>; interrupt-parent = <&pio>; interrupts = <PD 9 IRQ_TYPE_LEVEL_HIGH>; device-wake-gpios = <&pio PD 7 GPIO_ACTIVE_HIGH>; reset-gpios = <&pio PD 8 GPIO_ACTIVE_LOW>; }; }; spi1_pins_a: spi1@0 { pins = "PB11", "PB10", "PB9"; /*clk mosi miso hold wp*/ function = "spi1"; drive-strength = <10>; };
-
回复: 【T113-I】 请问该产品支持spi传输32bit数据吗
其次我看数据手册和spi-sunxi.h中 寄存器的地址定义不同,此外数据手册是否缺少了0x3c的寄存器定义
-
【T113-I】 请问该产品支持spi传输32bit数据吗
您好,尊敬的大佬们,由于我选用的spi外设是32bit传输的,所以应外设的需求,我根据T113的数据手册去设置BATC寄存器,还有更改了spi-sunxi.c中的 master->bits_per_word_mask = SPI_BPW_MASK(8) | SPI_BPW_MASK(32);
但是通过逻辑分析仪,甚至无法出现数据。以下是我通过截取spi寄存器的数值图:
所以我有以下三个疑问:
1:T113-i这款芯片 硬件上支持spi传输32bit吗?
2:若支持,请问我这样配置是否有误?
3:若不支持,请问我是否能够通过spi-gpio模拟出读写32bit的spi
非常希望得到大佬们的点拨 -
【t113-i】spi 32bit数据长度输出
大佬们,我的场景是需要spi以4个字节输出数据 原始的话是一个字节输出 spi-sunxi.c 里面默认了bits_per_word=8 我改成32之后 我发现还要配置BATC寄存器 但是配完BATC寄存器后还是无法输出32
有这方面经验的大佬吗 -
[T113S ] 如何设置spi1软件片选
大佬们,你们好,由于这个芯片的SPI1只有一个硬件片选信号,我们想通过软件片选的方式驱动多个spi设备,但因为网上资料较少,无从下手,假设增加PB12和PD10为两个SPI设备的软件片选引脚,请问需要增改哪些文件