0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RISC-V MCU CSM32RV20开发(二):Si24R1 通信模式调试

南京中科微电子有限公司 2022-01-20 19:06 次阅读

目 录

目的

实现过程

1.中断向量表和系统时钟初始化

2.外设初始化

2.1外设初始化(串口)

2.2外设初始化(SPI)

2.3外设初始化(GPIO)

2.4外设初始化(中断)

3.Si24R1通信模式介绍

4.Si24R1模块

5.SPI函数

6.TX_mode和RX_mode配置

7.通信判断‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

129a757e-32a8-11ec-aa30-dac502259ad0.png

目的

通过CSM32RV20开发平台,使用硬件SPI接口与Si24R1进行通信,通信成功后,通过串口打印数据。

实现过程:

1.中断向量表和系统时钟初始化

在IDE里新建项目后,都会包含CLIC_Init()和System_Clock_Init()两个函数。中断向量表初始化,系统中断初始化,用户无需关心。系统时钟初始化函数中,可以方便的选中时钟源、时钟分频系数、外设时钟使能和RC频率选择。

int main(void)
{

    ///----System Init ---------------------------------------------------------------------------------------------
    CLIC_Init();//中断向量表初始化
    System_Clock_Init();//系统时钟初始化
void System_Clock_Init(void)//系统时钟初始化
{
    //时钟源开关
    CMU->SRC_EN  = 1<<1   //RCOSC    bit[1]:0-off, 1-on
                  |1<<0;  //crystal  bit[0]:0-off, 1-on

    //外设和内核时钟来源选择
CMU->CLK_SEL = 1<<2   //phripheral  bit[3:2]:0-RCOSC, 1-crystal, 2-LSI(3K), 3-reserved
                  |1<<0;  //cpu         bit[1:0]:0-RCOSC, 1-crystal, 2-LSI(3K), 3-reserved

    //设置时钟分频系数
    CMU->CLK_DIV = 0<<10  //RTC         bit[14:10]:0-2, 1-2, 2-2, 3-2, 4-4, 5-4, 6-6, 7-6 ......
                  |0<<5   //phripheral  bit[9:5]:0-1, 1-1, 2-2, 3-3, 4-4, 5-5,......31-31
                  |0<<0;  //CPU         bit[9:5]:0-1, 1-1, 2-2, 3-3, 4-4, 5-5,......31-31

    //外设时钟使能
    CMU->PER_EN  = 1;    //bit[0]:0-off, 1-on

    //RC频率选择
    CMU_RC_DEFAULT->RC_DEFAULT = 0; //bit[0]:0-16MHz, 1-32MHz

}

2.外设初始化

2.1外设初始化(串口)

串口初始化:选中UART1,UART1即可以用作烧录使用(开发板串口默认使用UART1),又可以调用打印,方便数据输出。UART1:PA6:TX1,复用配置AF0(默认)。PA5:RX1,复用配置AF0(默认)。

UART_Init_case1(UART1);   //串口初始化

由于开发板上使用的晶振为32MHz,那么我们设置0x0116<<8串口波特率就是115200

UARTx->CTRL = 0<<25        //接收中断使能: 0-off,1-on
                 |0<<24        //发送中断使能:0-off,1-on
                 |0x0116<<8    //波特率(对应16M时钟):
                               //0x1a0b-2400,0x0683-9600,0x0341-19200,0x0116-57600,0x008b-115200
                               //0x0045-230400,0x0023-460800,0x0011-921600,0x000d-1128800


                 |1<<6         //模式选择:0-模式0,1-模式1,2/3-模式2
                 |0<<5         //多处理器使能
                 |1<<4         //接收使能
                 |0<<3         //发送数据bit8
                 |0<<2;        //接收数据bit8

12dd7c0c-32a8-11ec-aa30-dac502259ad0.png

2.2外设初始化(SPI)

SPI初始化,选中非中断模式。Si24R1采用四线制SPI,与MCU连接共6根线。Si24R1芯片引脚介绍(MOSI和MISO直接与MCU的硬件SPI对应连接即可,即MOSI与SPI1_MOSI连接)。CE,芯片开启信号,激活 RX 或 TX 模式。CSN,SPI 片选信号。SCK,SPI 时钟信号。MOSI,SPI 输入信号。MISO,SPI输出信号。IRQ,可屏蔽中断信号(可以通过0x00寄存器CONFIG配置屏蔽),低电平有效。

130e4f76-32a8-11ec-aa30-dac502259ad0.png12bb4f88-32a8-11ec-aa30-dac502259ad0.jpg

 SPI_Init_case1(SPI1);     //SPI初始化,非中断模式
12bb4f88-32a8-11ec-aa30-dac502259ad0.jpg

CSM32RV20,硬件SPI1引脚说明:PA2-SPI1_SCK,PA3-SPI1_MISO,PA4_SPI1_MOSI.

   if(SPIx==SPI1)
    {
        //用户自选CSN,软件操作片选信号


        //配置SCK
        GPIO_MODE_Init(GPIOA, PIN2, GPIO_MODE_AF);  //PA2复用模式
        GPIO_AF_Init(GPIOA,  PIN2,  GPIO_AF0);  //PA2复用到SPI1_SCK

        //配置MISO
        GPIO_MODE_Init(GPIOA, PIN3, GPIO_MODE_AF);  //PA3复用模式
        GPIO_AF_Init(GPIOA,  PIN3,  GPIO_AF0);  //PA3复用到SPI1_MISO

        //配置MOSI
        GPIO_MODE_Init(GPIOA, PIN4, GPIO_MODE_AF);  //PA4复用模式
        GPIO_AF_Init(GPIOA,  PIN4,  GPIO_AF0);  //PA4复用到SPI1_MOSI
    }
12bb4f88-32a8-11ec-aa30-dac502259ad0.jpg

根据Si24R1的SPI协议,CPHA时钟相位和CPOL的时钟极性(SCK空闲时状态为低电平,上升沿采样下降沿输出),选中SPI模式0。SPI速率选择为8分频-4MHz。使用软件CSN控制

SPIx->CTRL = 0x0<<8     //中断使能:0-关闭,1-开启
                |0x0<<7     //时钟极性:0-低电平,1-高电平
                |0x0<<6     //时钟相位:0-前沿采样,后沿输出,1-前沿输出,后沿采样,
                |0x1<<4     //SPI使能:0-关闭,1-使能
                |0x3;       //时钟分频:0-2分频,1-2分频,2-2分频,3-8分频,4-16分频,5-32分频,6-64分频,其他:64分频

2.3外设初始化(GPIO)

初始化CE,CSN,IRQ

SPI1_CSN_Init_case1();//CFG: CE-GPIO9,CSN-GPIO8,IRQ-GPIO7
void SPI1_CSN_Init_case1(void)//CFG: CE-GPIO9,CSN-GPIO8,IRQ-GPIO7
{
   GPIO_MODE_Init(GPIOA,PIN8,GPIO_MODE_OUTPUT);//CSN
    GPIO_Write(GPIOA,PIN8,GPIO_SET);//CSN=1

    GPIO_MODE_Init(GPIOA,PIN9,GPIO_MODE_OUTPUT);//CE
    GPIO_Write(GPIOA,PIN9,GPIO_RESET);//CE=0

    GPIO_MODE_Init(GPIOA,PIN7,GPIO_MODE_INPUT);//IRQ

}

2.4外设初始化(中断)

中断IRQ引脚,开发板上选择为PA7。

   GPIO_EXIT_Init_case4(GPIOA, PIN7);//检测下降沿
   Interrupt_Enable(EXIT9_5_int_ID);//CLIC使能EXIT中断
   SYS_Interrupt_Enable(); CLIC开总中断
void GPIO_EXIT_Init_case4(GPIO_TypeDef *GPIOx, uint8_t PINx)//检测下降沿
{
    GPIO_MODE_Init(GPIOx, PINx, GPIO_MODE_INPUT);
    GPIO_EXIT_MODE_Init(GPIOx, PINx, GPIO_EXIT_FALLING);
    GPIO_PULL_Init(GPIOx, PINx, GPIO_PULLUP);  //内部上拉
    GPIO_INTER_enable(GPIOx, PINx);   //GPIO 中断使能
}
12bb4f88-32a8-11ec-aa30-dac502259ad0.jpg

中断处理函数:

void EXIT9_5_IRQHandler(void)
{

    if(EXTI->ISR&(0x1<<7)) //外部中断 PA7
    {

        IRQ_flag=1;
        EXTI->ISR |= 0x1<<7;
        //IRQ Handler......
    }

3.Si24R1通信模式介绍

Si24R1通信模式有两种,一种是Si24R1通信模式,一种是兼容模式,两者的区别就在于是否有包控制字,包控制可以实现动态负载长度,ACK通信,ACKPAYLAOD通信等。
Si24R1通信模式:

143a64e8-32a8-11ec-aa30-dac502259ad0.png12bb4f88-32a8-11ec-aa30-dac502259ad0.jpg

1498d71c-32a8-11ec-aa30-dac502259ad0.png12bb4f88-32a8-11ec-aa30-dac502259ad0.jpg

兼容模式

15055360-32a8-11ec-aa30-dac502259ad0.png

12bb4f88-32a8-11ec-aa30-dac502259ad0.jpg

4.Si24R1模块

Si24R1模块采用亿佰特的E01C

1558e78c-32a8-11ec-aa30-dac502259ad0.png

5. SPI函数

SPI读写函数:SPI1读写一个字节

uint8_t spi_rw_byte(uint8_t byte)
{
    uint8_t a;
    SPI_Transceive(SPI1,&byte,&a,1);
    return  a;
}
12bb4f88-32a8-11ec-aa30-dac502259ad0.jpg

SPI写寄存器:写数据value到reg寄存器,同时返回寄存器值

uint8_t spi_rw_reg(uint8_t reg,uint8_t value)
{
uint8_t status;

reg |= W_REGISTER ;                        //写寄存器命令

        GPIO_Write(GPIOA,PIN8,GPIO_RESET);
status=spi_rw_byte(reg);            //选择寄存器,同时返回状态字
spi_rw_byte(value);
        GPIO_Write(GPIOA,PIN8,GPIO_SET);

return status;                //返回状态寄存器
}
12bb4f88-32a8-11ec-aa30-dac502259ad0.jpg

SPI读寄存器

//========从reg寄存器中读一个字节的数据========
uint8_t spi_rd_reg(uint8_t reg)
{
uint8_t value;

reg |= R_REGISTER ;       //读寄存器命令
GPIO_Write(GPIOA,PIN8,GPIO_RESET);
    spi_rw_byte(reg);
value = spi_rw_byte(0);         //从该寄存器中读数据
    GPIO_Write(GPIOA,PIN8,GPIO_SET);

return (value );     //返回状态寄存器
}

12bb4f88-32a8-11ec-aa30-dac502259ad0.jpg

SPI读BUFF:

//函数:spi_read_buf()
//功能:从reg寄存器读出bytes个字节,通常用来读取接收通道数据 或 接收/发送地址
//=====================================================================================
uint8_t spi_read_buf(uint8_t reg, uint8_t *pBuf, uint8_t bytes)
{

uint8_t status;
uint8_t i;
reg |= R_REGISTER;
    GPIO_Write(GPIOA,PIN8,GPIO_RESET);
  status  = spi_rw_byte(reg);                      // 选择寄存器,同时返回状态字
  for(i = 0; i < bytes; i++)
    {
   pBuf[i] = spi_rw_byte(0);    // 逐个字节从Si24R1读出
}
  GPIO_Write(GPIOA,PIN8,GPIO_SET);                             // CSN拉高,结束数据传输
  return(status);                           // 返回状态寄存器
}
12bb4f88-32a8-11ec-aa30-dac502259ad0.jpg

SPI写BUFF

//函数:spi_write_buf()
//功能:把pBuf缓存中的数据写入到Si24R1,通常用来写入发射通道数据 或 接收/发送地址
//=====================================================================================
uint8_t spi_write_buf(uint8_t reg, uint8_t *pBuf, uint8_t bytes)
{
uint8_t status, i;
reg |= W_REGISTER;
  GPIO_Write(GPIOA,PIN8,GPIO_RESET);                            // CSN置低,开始传输数据
  status = spi_rw_byte(reg);      // 选择寄存器,同时返回状态字
  for(i = 0; i < bytes; i++)
    {
   spi_rw_byte(pBuf[i]);        // 逐个字节写入Si24R1
}
  GPIO_Write(GPIOA,PIN8,GPIO_SET);       // CSN拉高,结束数据传输
  return(status);              // 返回状态寄存器
}
12bb4f88-32a8-11ec-aa30-dac502259ad0.jpg 

6. TX_mode和RX_mode配置

TX_mode: CE拉低后,配置发射地址、发射地址宽度、射频信道、传输速率,发射功率,配置发射模式、CRC、清除STATUS寄存器的标志位!!!(可能在调试程序或者异常退出,没有清除STATUS,但是芯片没断电,可能IRQ的电平一直为低,最好就在初始化时清除STATUS寄存器的标志位。

spi_rw_reg(STATUS,0xff);
12bb4f88-32a8-11ec-aa30-dac502259ad0.jpg
//Si24R1 NOACK 发射模式
void Si24R1_Tx_Mode(void)
{
GPIO_Write(GPIOA,CE_Pin,GPIO_RESET);

    spi_write_buf(TX_ADDR, TX_ADDRESS, 5); // 写入发送地址
spi_rw_reg(FEATURE, 0x01); // 使能 W_TX_PAYLOAD_NOACK 命令

spi_rw_reg(SETUP_AW, 0x03); // 5 byte Address width
spi_rw_reg(RF_CH, 2); // 选择射频通道0x40
spi_rw_reg(RF_SETUP, 0x0f); // 数据传输率 2Mbps
spi_rw_reg(CONFIG, 0x0e); //配置为发射模式、CRC 为 2Bytes
    spi_rw_reg(STATUS,0xff);
//GPIO_Write(GPIOA,CE_Pin,GPIO_SET);
}
12bb4f88-32a8-11ec-aa30-dac502259ad0.jpg

RX_mode: 发射端的配置与接收端的配置一致即可

//Si24R1 NOACK 接收模式
void Si24R1_Rx_Mode(void)
{
GPIO_Write(GPIOA,CE_Pin,GPIO_RESET);

spi_write_buf(RX_ADDR_P0, TX_ADDRESS, 5); // 写入接收地址
//spi_rw_reg(FEATURE, 0x01); // 使能 W_TX_PAYLOAD_NOACK 命令
spi_rw_reg(EN_RXADDR , 0x01); // 使能接收通道
spi_rw_reg(RF_CH, 2); // 选择射频通道0x40
spi_rw_reg(RX_PW_P0 ,TX_PLOAD_WIDTH ); // 设置接收通道0负载数据宽度
spi_rw_reg(SETUP_AW, 0x03);   // 5 byte Address width
spi_rw_reg(RF_SETUP, 0x0f); // 数据传输率 2Mbps
spi_rw_reg(CONFIG, 0x0f); //配置为接收方、RC 为 2Bytes
spi_rw_reg(STATUS,0xff);
//
//GPIO_Write(GPIOa,CE_Pin,GPIO_SET);
}
12bb4f88-32a8-11ec-aa30-dac502259ad0.jpg

Si24R1_TxPacket():发射函数,主要是给TX_FIFO填充数据,CE拉高后就会发射出去。其中要注意:发射前最好擦除FIFO,再填写FIFO,这样对异常的数据发送可以起到一定的屏蔽作用,否则可能会陷入始终发上一包写入数据的怪圈。等到IRQ下降沿中断后,判断是否为发射完成中断,完成即返回TX_OK;

uint8_t Si24R1_TxPacket()
{
uint8_t sta;
uint8_t TX_BUF[TX_PLOAD_WIDTH] = {0,7,7,5,8,5,2,1};
IRQ_flag=0;
    spi_rw_reg(FLUSH_TX,0xff);
    spi_rw_reg(FLUSH_RX,0xff);
//GPIO_Write(GPIOA,CE_Pin,GPIO_RESET);
//使用NOACK模式时,应使用命令 W_TX_PAYLOAD_NOACK
spi_write_buf(W_TX_PAYLOAD_NOACK,TX_BUF,TX_PLOAD_WIDTH);//写数据到TX BUF

  //spi_write_buf(W_TX_PAYLOAD,TX_BUF,TX_PLOAD_WIDTH);//写数据到TX BUF
 GPIO_Write(GPIOA,CE_Pin,GPIO_SET);//启动发送
 Delay32M_us(10);
while(0==IRQ_flag)
{
        NOP;     //切记一定得加NOP指令,由于GCC编译器优化问题,程序会只调用一次中断标志。

}//等待发送完成
IRQ_flag=0;
sta = spi_rd_reg(STATUS);        // 返回状态寄存器
spi_rw_reg(W_REGISTER+STATUS,sta); //清除TX_DS或MAX_RT中断标志
if(sta&MAX_RT)//达到最大重发次数
{
spi_rw_reg(FLUSH_TX,0xff);//清除TX FIFO寄存器
return MAX_RT;
}
if(sta&TX_OK)//发送完成
{
return TX_OK;
}
return 0xff;//其他原因发送失败
}
12bb4f88-32a8-11ec-aa30-dac502259ad0.jpg

其中,需要注意的是:在等待中断的标志IRQ_flag时,如果直接判断,由于GCC编译器优化,我们利用IDE的反汇编功能,查看下两者的区别:

16a1843c-32a8-11ec-aa30-dac502259ad0.png12bb4f88-32a8-11ec-aa30-dac502259ad0.jpg
while(0==IRQ_flag);

17169754-32a8-11ec-aa30-dac502259ad0.png12bb4f88-32a8-11ec-aa30-dac502259ad0.jpg
while(0==IRQ_flag)
{
        NOP;    
}
17903f1e-32a8-11ec-aa30-dac502259ad0.png12bb4f88-32a8-11ec-aa30-dac502259ad0.jpg

7.通信判断

main()函数中,调用Si24R1_TxPacket();函数,判断返回值是否为发射完成TX_OK标志,闪灯+打印即可。打印这里,虽然库函数里有printf()和ee_printf(),都支持,但是推荐使用ee_printf()函数,这个是简化版的printf函数(而不是C运行库中提供的printf函数),以此生成的代码体积就会更小。

       sta=Si24R1_TxPacket( );
        Delay32M_ms(500);

        if(sta==TX_OK)
        {
        GPIO_Write(GPIOA,PIN10,GPIO_RESET);
        Delay32M_ms(500);
        GPIO_Write(GPIOA,PIN10,GPIO_SET);
        ee_printf("Hello,IC农民\r\n");
        }
        else
            Delay32M_ms(20);

}
18087ec0-32a8-11ec-aa30-dac502259ad0.png

12bb4f88-32a8-11ec-aa30-dac502259ad0.jpg

1874dfb6-32a8-11ec-aa30-dac502259ad0.png12bb4f88-32a8-11ec-aa30-dac502259ad0.jpg

总结

1.注意在等中断IRQ产生后的IRQ_flag时,需要对while(0==IRQ_flag)处理时,在函数里加入一个NOP指令,以此规避GCC编译器优化的问题造成IRQ_flag只判断一次。

2.使用ee_printf()函数,减少代码体积。

3. 在程序里有使能中断时,在使能单个中断后,需要开启中断总开关,否则会出现无法进入中断!!。例如:

18ba3f20-32a8-11ec-aa30-dac502259ad0.png

   Interrupt_Enable(EXIT9_5_int_ID);//CLIC使能EXIT中断
   SYS_Interrupt_Enable(); CLIC开总中断

那么,这里,硬件SPI,串口打印,GPIO中断等外设就操作完了。个人能力有限,欢迎大家批评指正。


版权声明:本文为CSDN博主「IC农民」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_28729013/article/details/120669558


原文标题:RISC-V MCU CSM32RV20开发(二):Si24R1 通信模式调试

文章出处:【微信公众号:南京中科微电子有限公司】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • RISC-V
    +关注

    关注

    45

    文章

    2270

    浏览量

    46131
收藏 人收藏

    评论

    相关推荐

    RISC-V架构及MRS开发环境回顾

    —— CH32V103系列MCU。作为长久以来对RISC-V架构关注和研究的成果, RISC-V3A处理器,支持IMAC指令子集,内嵌了PFIC中断控制器,提供硬件加速中断进出栈
    发表于 12-16 23:08

    常用在工业控制系统上的MCU芯片资料:CSM32RV20

    CSM32RV20是一款基于RISC-V核的低功耗MCU芯片。 内置RISC-V RV32IMAC内核(2.6CoreMark/MHz);
    的头像 发表于 11-15 17:19 199次阅读
    常用在工业控制系统上的<b class='flag-5'>MCU</b>芯片资料:<b class='flag-5'>CSM32RV20</b>

    Si24R05:125K接收&amp;2.4G收发SoC芯片资料

    Si24R05高度集成的低功耗SoC芯片 ● 具有低功耗、Low Pin Count、宽电压工作范围。 ● 内核:采用RISC-V RV32IMAC(2.6 CoreMark/MHz)。 ● 集成
    发表于 10-31 16:27

    Si24R05:125K接收&amp;2.4G收发SoC芯片数据手册

    CSM32RV003+Ci24R1+Si3933的合封芯片 极少外围器件,降低系统应用成本 工作温度范围-40~85℃ 支持串口升级 支持 cJTAG 2线调试接口 封装:SOP16 / 9.9*6*1.75mm 超低功耗,至低功耗可达1.6uA(
    的头像 发表于 10-31 16:22 188次阅读
    <b class='flag-5'>Si24R</b>05:125K接收&amp;2.4G收发SoC芯片数据手册

    SI24R1与NRF24L01P 对比方案

    1.9-3.6V 宽电源范围内稳定工作。PIN对PIN兼容替代NRF24L01+。Si24R1采用GFSK/FSK数字调制与解调技术。数据传输速率可以调节,支持2Mbps,1Mbps
    发表于 09-30 15:05

    RISC-V Summit China 2024 | 青稞RISC-V+接口PHY,赋能RISC-V高效落地

    更好的使用体验: 1. 青稞RISC-V首先针对高速数据传输场景,通过免表中断提升了MCU的响应速度; 2. 针对蓝牙和以太网等协议栈应用,扩展自定义指令提升了代码密度; 3. 率先设计的两线
    发表于 08-30 17:37

    SI24R1 TO NRF24L01P 引脚及软硬件中文开发资料

    L01+的参考设计金属PAD下面有走3.3V的电源线,如果使用Si24R1 7dbm的发射功率,没有将底部的3.3V走线移除的话,那些噪声会干扰到电源,从而会增加通信的丢包率以及
    发表于 07-30 14:26

    Si24R03:高度集成的低功耗SOC芯片数据手册解读

    、WUP、IWDG、RTC、无线收发器等丰富的外设。 合封说明:Si24R03为CSM32RV003和Si24R1的合封芯片。 Si24R03芯片特性: 内置
    的头像 发表于 07-24 15:19 506次阅读
    <b class='flag-5'>Si24R</b>03:高度集成的低功耗SOC芯片数据手册解读

    Si24R05—高度集成的低功耗 SoC 芯片

    、WUP、IWDG、RTC、无线收发器、3D低频唤醒接收器等丰富的外设。内核采用RISC-V RV32IMAC(2.6 CoreMark/MHz)。 Si24R05提供了配套的调试开发
    发表于 07-03 00:12

    Ci24R1Si24R1:2.4GHz数据通信芯片对比数据资料分析

    数据通信芯片里面,Ci24R1Si24R1都具备收发一体的功能,当然相似的两颗芯片,它们的参数还是有明显的区别,接下来我给大家看看它们分别的芯片特性和优势体现在哪里。 1、  从频段
    的头像 发表于 06-14 17:16 747次阅读
    Ci<b class='flag-5'>24R1</b>与<b class='flag-5'>Si24R1</b>:2.4GHz数据<b class='flag-5'>通信</b>芯片对比数据资料分析

    RISC-VMCU关于USB高速通信设计的难点

    成熟架构还有所欠缺。在USB高速通信设计方面,RISC-V MCU需要解决驱动程序、固件和操作系统的兼容性问题,确保与现有USB设备和系统的无缝对接。 开发工具链 :
    发表于 05-27 16:23

    国产RISC-V MCU推荐

    可以达到TOP 1。 官网显示,HPM6700/6400系列MCU来是先楫的高性能实时RISC-V微控制器,为工业自动化及边缘计算应用提供了极大的算力、高效的控制能力及丰富的多媒体功能。 内核方面
    发表于 04-17 11:00

    瑞萨电子推出采用自研RISC-V CPU内核的通用32位MCU

    5.5V 封装:16 WLCSP、24/32/48 QFN封装(QFP可选) R9A02G021 RISC-V MCU得到瑞萨e² stud
    发表于 03-30 22:08

    NRF24L01P和SI24R1的区别

    的无线模块。 1、产自Nordic的无线模块叫NRF24L01,而产自南京的无线模块叫Si24R1,如下图所示 2、两个模块的技术资料基本一样 感觉Si24R1无线模块就是NRF
    发表于 03-29 15:05

    2.4G+MCU低功耗合一芯片SI24R03

    1 简介 Si24R03 是一款高度集成的低功耗 SOC 芯片,其集成了基于 RISC-V 核的低功耗 MCU 和 工作在 2.4GHz ISM 频段的无线收发器模块。
    发表于 12-29 17:12