林尘寄 发表于 2023-9-19 23:09:21

【米尔瑞萨RZ/G2L开发板-创新应用】项目开发三 电力终端抄表之电力数据(未调通)

项目开发三 电力终端抄表之电力数据(未调通)          前面一期把蓝牙和串口抄表功能实现了,最重要的电力数据还没得到,有专门的计量芯片来完成,此处借由V9203来实现,它的特性如下:
敲击ls /dev/spidev*,RZ/G2L返回/dev/spidev0.0说明只有一路挂载了一路spi,板子J20的19/21/23/24脚刚好接到V9203的spi:
它的主要代码为:#define V9203CMD_WRDATAL      0x08
#define V9203CMD_WRDATAH      0x0a
#define V9203CMD_WRADDRDST      0x0c
#define V9203CMD_RDADDRDST      0x10
#define V9203CMD_RDDATAL      0x12
#define V9203CMD_RDDATAH      0x14
#define V9203CMD_LASTADDR       0x0e
#define V9203CMD_LASTDATAL      0x16
#define V9203CMD_LASTDATAH      0x18

#define V9203_ANCtrl0         0x8000
#define V9203_ANCtrl1         0x8001
#define V9203_ANCtrl2         0x8002
#define V9203_ANCtrl3         0x8003

uint8_t V9203_spifcs(uint8_t *dat,uint8_t len)
{
    if(len==0||dat==NULL)
         return 0;
    uint8_t i=0,fcs=0;
    for(i=0;i<len;i++)
         fcs+=dat;
   return fcs^0xff;
}

uint8_t tx[] = {
            0x80|V9203CMD_RDADDRDST,0,0,0,
            0x80|V9203CMD_RDDATAL,0xFF,0xFF,0xFF,
            0x80|V9203CMD_RDDATAH,0xFF,0xFF,0xFF, };

tx= V9203_ANCtrl2>>8;
tx= V9203_ANCtrl2>>8;

          for(int i=1;i<4;i++)
                   tx=V9203_spifcs(tx+4*(i-1),3);

          uint8_t rx = {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,
          };
通过电压互感器接上220V家庭用电,由于对Linux不很熟,运行结果要么是数据不对要么时钟错误,在STM32上跑是正常的:

时间有限,调了几次没调通。先这样
页: [1]
查看完整版本: 【米尔瑞萨RZ/G2L开发板-创新应用】项目开发三 电力终端抄表之电力数据(未调通)