利用硬件SPI控制TX1818灯珠

本文详细介绍了TX1818CELED灯珠的SPI控制方法,包括芯片概述、数据协议、接口选择(GPIO、PWM、SPI)、时序分析以及协议转换示例。重点讨论了使用GPIO和SPI进行数据传输的优缺点,为硬件开发者提供了一个实用的指导。
摘要由CSDN通过智能技术生成

利用硬件SPI控制TX1818灯珠

目录

利用硬件SPI控制TX1818灯珠... 1

1     芯片简介... 2

1.1.     芯片概述... 2

1.2.     芯片特征:... 2

1.3.     芯片协议... 3

1.3.1.      时序波形图... 3

1.3.2.      数据传输... 3

1.3.3.      颜色结构... 3

1.3.4.      0/1码时间间隔... 4

1.3.5.      高低电平判定... 4

2     硬件接口选定... 4

2.1.     GPIO.. 4

2.1.1.      协议转换... 4

2.1.2.      举例说明... 5

2.1.3.      优劣... 6

2.2.     PWM... 6

2.3.     SPI 6

2.3.1.      原理分析... 6

2.3.2.      协议转换... 7

2.3.3.      优劣... 8

  1.  芯片简介
    1.  芯片概述

TX1818CE 是一个集控制电路与发光电路于一体的智能外控LED 光源。其外型与一个5050LED灯珠相同,每个元件即为一个像素点。像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路,电源稳压电路,内置恒流电路,高精度RC 振荡器,输出驱动采用专利PWM 技术,有效保证了像素点内光的颜色高一致性。

数据协议采用单极性归零码的通讯方式,像素点在上电复位以后,DIN 端接受从控制器传输过来的数据,首先送过来的24bit 数据被第一个像素点提取后,送到像素点内部的数据锁存器,剩余的数据经过内部整形处理电路整形放大后通过DO 端口开始转发输出给下一个级联的像素点,每经过一个像素点的传输,信号减少24bit。

LED 具有低电压驱动,环保节能,亮度高,散射角度大,一致性好,超低功率,超长寿命等优点。将控制电路集成于LED 上面,电路变得更加简单,体积小,安装更加简便。

    1.  芯片特征:
  •  采用高压功率CMOS 工艺;
  •  默认8mA 恒流输出,便于降低内置灯珠功耗;
  •  灰度调节电路(256 级灰度可调);
  •  单线串行级联接口(DIN,DO);
  •  内置高精度和高稳定性振荡器;
  •  数据整形:接受完本单元数据自动将后续数据整形输出;
  •  数据传输频率可达800Kbps。
    1.  芯片协议
      1.  时序波形图

      1.  数据传输

      1.  颜色结构

      1.  0/1码时间间隔

T符号

码元Code

最小值

典型值

最大值

单位

T0H

0码,高电平时间

200

300

400

ns

T0L

0码,低电平时间

800

900

--

ns

T1H

1码,高电平时间

650

900

1000

ns

T1L

1码,低电平时间

200

300

--

ns

Trst

Reset码,低电平时间

≥200

μs

      1.  高低电平判定

  1.  硬件接口选定
    1.  GPIO
      1.  协议转换
  • 发送1码的伪码为:

static void set_led_1(void)//发出二进制1

{

         set_led_hight();

         ndelay(900);

         set_led_low();

         ndelay(300);

}

  • 发送0码的伪码为:

static void set_led_0(void)//发出二进制0

{

         set_led_hight();

         ndelay(300);

         set_led_low();

         ndelay(900);

}

  • 发送复位码的伪码为:

static void reset_op(void)//发出Reset信号

{

         set_led_hight();//首先将总线拉高ndelay

         ndelay(300);//保持一段时间

         set_led_low();//拉低

         udelay(80);//至少保持50us,之后芯片等待接收新的数据

}

      1.  举例说明

例如:输出是红灯需要发送的数据为0XFF0000

  • 转换为2进制:111111110000000000000000
  • 转换为函数伪码:

set_led_1

set_led_1

set_led_1

set_led_1

set_led_1

set_led_1

set_led_1

set_led_1

set_led_0

set_led_0

set_led_0

set_led_0

set_led_0

set_led_0

set_led_0

set_led_0

set_led_0

set_led_0

set_led_0

set_led_0

set_led_0

set_led_0

set_led_0

set_led_0

reset_op

  • 转换为波形

      1.  优劣
  1. ndelay是忙等待,可能会导致播放的时候视频卡顿,使用高精度时钟触发延时无法达到要求。
  2. 操作GPIO口调用函数会导致时间延迟。
  3. CPU调度可能会导致时间延迟。
  4. 实现简单,易理解。
    1.  PWM

未实验

    1.  SPI
      1.  原理分析
  1. 理论分析

使用SPI信号的MOSI管脚当作TX1818CE的DIN数据脚

Code-0码的耗时:300+900=1200ns=1.2us

Code-1码的耗时:600+300=1200ns=1.2us

SPI 频率设计:

SPI发送可以设置8位或是16位数据。

SPI以8位为例,用8位数据代表一个码值,8位的时间总和,等于1.2us;

每一位SPI数据耗时为:1.2us / 8=0.15u

公式:频率 = 周期的倒数

频率 = 1 / 0.15u

频率 = 6.666666M

SPI设置6.6M就可以了

  1. 数据转换

SPI数据1代表输出150ns的高电平

SPI数据0代表输出150ns的低电平

Code-0码=300ns高+900ns低=150*2+150*6=11000000=0XC0

Code-1码=900ns高+300ns低=150*6+150*2=11111100=0XFC

码值

高低电压

SPI二进制数据

SPI16进制数据

Code-0码

300ns高,900ns低

11000000

0XC0

Code-1码

900ns高,300ns低

11111100

0XFC

      1.  协议转换
  1. RGB数据转换为SPI数据

static int rgb2spi(u8 *dst, u8 *org,int cnt)

{

    int i,j;

    int color=0;

    int index=0;

    if(NULL==org|| NULL==dst)

        return index;

    //数据组成为RGB/RGB/RGB...

    for(i=0; i<cnt; i++)

    {

        color=org[i];//获取一个颜色值

        for (j = 0; j < 8; j++)

        {

            index=i*8+j;

            if (1 & color)//每一个bit转换为SPI的一个byte

                dst[index]=SPI_LED_CODE1;

            else

                dst[index]=SPI_LED_CODE0;

            color =color >> 1;

        }

    }

    return index+1;

}

  1. RST码转换

static int addrst(u8 *dst, int index)

{

    int i=0;

    if( NULL== dst)

        return index;

   

    dst[index++]=SPI_LED_RESET;

    dst[index++]=0x00;

    dst[index++]=0x00;

    dst[index++]=0x00;

    for(i=index;i<(index/64+1)*64;i++)

        dst[i]=0x00;

    return i;

}

      1.      优劣
  1. 对其他模块无影响。
  2. 一组SPI(4个管脚)无法它用。
  3. 只能使用SPI1和SPI2(目前的验证结果)。
  4. 只能使用DMA的方式,非DMA方式会出现无法控制多个灯的情况。
  5. SPI的MOSI和灯带的数据线之间要有缓冲器。否则会击穿CPU的IO脚。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值