Explorar el Código

Merge pull request #9 from RT-Thread-Studio/update

【更新】更新 1.7.2 版本
流光 hace 3 semanas
padre
commit
bf4414b390

+ 16 - 168
05_gui_lvgl_ethercat_motor_control_7in_1024_600/applications/ecat_service/ethercat_domain.c

@@ -78,8 +78,8 @@ ec_pdo_info_t slave_pdos[] = {
 };
 
 ec_sync_info_t slave_syncs[] = {
-    { 1, EC_DIR_OUTPUT, 1, &slave_pdos[0], EC_WD_DISABLE },
-    { 1, EC_DIR_INPUT, 1, &slave_pdos[1], EC_WD_DISABLE },
+    { 2, EC_DIR_OUTPUT, 1, &slave_pdos[0], EC_WD_DISABLE },
+    { 3, EC_DIR_INPUT, 1, &slave_pdos[1], EC_WD_DISABLE },
 };
 
 static void servo_switch_op(struct rpdo_csp *output, struct tpdo_csp *input)
@@ -111,102 +111,6 @@ static void servo_switch_op(struct rpdo_csp *output, struct tpdo_csp *input)
     }
 }
 
-static void lc_pdo_config(struct ec_master *master)
-{
-    uint32_t index = 0;
-    uint32_t pdo_index;
-    uint32_t i = 0;
-
-    if (master->dc_type)
-    {
-        ecat_dc_config_ex(master, master->dc_index, master->dc_active,
-            master->dc_cycltime0, master->dc_cycltime1,
-            master->dc_cyclshift); // SYNC0 on slave 1
-    }
-    else
-    {
-        ecat_dc_config(master, master->dc_index, master->dc_active,
-            master->dc_cycltime0, master->dc_cyclshift); // SYNC0 on slave 1
-    }
-
-    for (i = 0; i < sizeof(slave_syncs) / sizeof(ec_sync_info_t); i++)
-    {
-        if (slave_syncs[i].slave_pos != 0xffff)
-        {
-            if (slave_syncs[i].dir == EC_DIR_OUTPUT)
-            {
-                pdo_index = 0;
-                // 1c12.0
-                ecat_sdo_write_u32(master, slave_syncs[i].slave_pos, 0x1c12, 0,
-                    pdo_index, EC_TIMEOUTRXM);
-                while (pdo_index < slave_syncs[i].n_pdos)
-                {
-                    const ec_pdo_info_t *pdo_info =
-                        &slave_syncs[i].pdos[pdo_index];
-                    index = 0;
-                    // 1c12.0
-                    ecat_sdo_write_u16(master, slave_syncs[i].slave_pos, 0x1c12,
-                        pdo_index + 1, pdo_info->index, EC_TIMEOUTRXM);
-                    ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                        pdo_info->index, index, 0, EC_TIMEOUTRXM);
-                    while (index < pdo_info->n_entries)
-                    {
-                        uint32_t sdo_data =
-                            (pdo_info->entries[index].index << 16) |
-                            (pdo_info->entries[index].subindex << 8) |
-                            pdo_info->entries[index].bit_length;
-                        ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                            pdo_info->index, index + 1, sdo_data,
-                            EC_TIMEOUTRXM);
-                        index++;
-                    }
-                    ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                        pdo_info->index, 0, index, EC_TIMEOUTRXM);
-                    pdo_index++;
-                }
-                // 1c12.0
-                ecat_sdo_write_u32(master, slave_syncs[i].slave_pos, 0x1c12, 0,
-                    pdo_index, EC_TIMEOUTRXM);
-            }
-            else if (slave_syncs[i].dir == EC_DIR_INPUT)
-            {
-                pdo_index = 0;
-                // 1c13.0
-                ecat_sdo_write_u32(master, slave_syncs[i].slave_pos, 0x1c13, 0,
-                    pdo_index, EC_TIMEOUTRXM);
-                while (pdo_index < slave_syncs[i].n_pdos)
-                {
-                    const ec_pdo_info_t *pdo_info =
-                        &slave_syncs[i].pdos[pdo_index];
-                    index = 0;
-                    // 1c13.0
-                    ecat_sdo_write_u16(master, slave_syncs[i].slave_pos, 0x1c13,
-                        pdo_index + 1, pdo_info->index, EC_TIMEOUTRXM);
-                    ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                        pdo_info->index, index, 0, EC_TIMEOUTRXM);
-                    while (index < pdo_info->n_entries)
-                    {
-                        uint32_t sdo_data =
-                            (pdo_info->entries[index].index << 16) |
-                            (pdo_info->entries[index].subindex << 8) |
-                            pdo_info->entries[index].bit_length;
-                        ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                            pdo_info->index, index + 1, sdo_data,
-                            EC_TIMEOUTRXM);
-                        index++;
-                    }
-                    ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                        pdo_info->index, 0, index, EC_TIMEOUTRXM);
-                    pdo_index++;
-                }
-                // 1c13.0
-                ecat_sdo_write_u32(master, slave_syncs[i].slave_pos, 0x1c13, 0,
-                    pdo_index, EC_TIMEOUTRXM);
-            }
-        }
-    }
-}
-
 #define ANGLE_TO_PULSE(x)       ((((x) * 10) * 131071 / 3600) % 131072)
 #define PULSE_TO_ANGLE(x)       (abs(((x) % 131072) / 131072.0f * 3600 / 10))
 
@@ -235,84 +139,34 @@ static int lc_csp_mode(const char *ifname)
         return err;
     }
 
-    err = ecat_config_init(&csp_master, RT_FALSE);
-    if (err)
-    {
-        rt_kprintf("ethercat master init failed, err:%d\n", err);
-        return err;
-    }
-
     slave_counts = ecat_slavecount(&csp_master);
     rt_kprintf("Found slaves count:%d\n", slave_counts);
 
-    err = ecat_write_state(&csp_master, 0, EC_STATE_PRE_OP);
-    if (err)
-    {
-        rt_kprintf("ecat_write_state PRE_OP failed\n");
-        return err;
-    }
+    static ec_slave_config_t slave_cia402_config;
 
-    state = EC_STATE_PRE_OP;
-    err = ecat_check_state(&csp_master, 0, &state, 2000000 * 3);
-    if (err != RT_EOK)
-    {
-        rt_kprintf("Not all slaves reached PRE_OP state.\n");
-        return err;
-    }
-
-    ecat_config_dc(&csp_master);
+    slave_cia402_config.dc_assign_activate = 0x300;
+    slave_cia402_config.dc_sync[0].cycle_time = csp_master.main_cycletime_us * 1000;
+    slave_cia402_config.dc_sync[0].shift_time = 500000;
+    slave_cia402_config.dc_sync[1].cycle_time = 0;
+    slave_cia402_config.dc_sync[1].shift_time = 0;
+    slave_cia402_config.sync = slave_syncs;
+    slave_cia402_config.sync_count = sizeof(slave_syncs) / sizeof(ec_sync_info_t);
+    ecat_slave_config(&csp_master, 0, &slave_cia402_config);
+    ecat_master_start(&csp_master);
 
-    lc_pdo_config(&csp_master);
-
-    err = ecat_config_map_group(
-        &csp_master, (void *)(csp_master.process_data), 0);
-    if (err != RT_EOK)
-    {
-        rt_kprintf("ecat_config_map_group failed\n");
-        return err;
-    }
-    
-    err = ecat_write_state(&csp_master, 0, EC_STATE_SAFE_OP);
-    if (err != RT_EOK)
-    {
-        rt_kprintf("ecat_write_state PRE_OP failed\n");
-        return err;
-    }
-
-    state = EC_STATE_SAFE_OP;
+    state = EC_STATE_OPERATIONAL;
     err = ecat_check_state(&csp_master, 0, &state, 20000000 * 3);
     if (err != RT_EOK)
     {
-        rt_kprintf("Not all slaves reached SAFE_OP state.%d\n", err);
-        return err;
-    }
-
-    err = ecat_write_state(&csp_master, 0, EC_STATE_OPERATIONAL);
-    if (err != RT_EOK)
-    {
-        rt_kprintf("ecat_write_state PRE_OP failed\n");
+        rt_kprintf("Not all slaves reached operational mode.\n");
         return err;
     }
 
-    struct rpdo_csp *rmap = (struct rpdo_csp *)(csp_master.process_data);
+    struct rpdo_csp* rmap = (struct rpdo_csp*)(csp_master.process_data);
     struct tpdo_csp *tmap =
         (struct tpdo_csp *)(csp_master.process_data + sizeof(struct rpdo_csp));
     rmap->control_word = 0x8;
 
-    /* swith mode */
-    int _chk = 400;
-    do
-    {
-        servo_switch_op(rmap, tmap);
-        ecat_send_processdata_group(&csp_master, 0);
-        ecat_receive_processdata_group(&csp_master, 0, 2000000 * 3);
-        state = EC_STATE_OPERATIONAL;
-    } while (
-        _chk-- && (ecat_check_state(&csp_master, 0, &state, 2000) != RT_EOK));
-
-    struct ecat_timer t;
-    ecat_timer_start(&t, 1000);
-
     while (1)
     {
         servo_switch_op(rmap, tmap);
@@ -326,8 +180,6 @@ static int lc_csp_mode(const char *ifname)
             goto stop;
         }
 
-        ecat_send_processdata_group(&csp_master, 0);
-        ecat_receive_processdata_group(&csp_master, 0, 2000 * 10);
         if (rmap->control_word == 7)
         {
             rmap->mode_byte = 0x8;
@@ -359,12 +211,8 @@ static int lc_csp_mode(const char *ifname)
                 }
             }  
         }
-        while (ecat_timer_is_expired(&t) == RT_FALSE);
-        ecat_timer_start(&t, 1000);
 stop:
-        ecat_send_processdata_group(&csp_master, 0);
-        ecat_receive_processdata_group(&csp_master, 0, 2000 * 10);
-        rt_thread_delay(1);
+        rt_thread_delay(5);
     }
 
     return 0;

+ 75 - 211
06_bus_ethercat_master_2motor_1io/applications/ecat_service/ethercat_2motor_1io.c

@@ -49,12 +49,7 @@ static ec_master_t csp_master = {
     .recovery_timeout_ms = 3000, // 3s
     .process_data = process_data,
     .process_data_size = 4096,
-    .dc_active = 1,
-    .dc_cycltime0 = 50000000,
-    .dc_cyclshift = 10000,
-    .dc_index = 1,
     .net_mode = EC_NET_MODE_EXCLUSIVE,
-    .priority = 1,
 };
 
 static ec_pdo_entry_info_t slave1_output_pdo_entries[] = {
@@ -76,115 +71,46 @@ static ec_pdo_entry_info_t slave1_input_pdo_entries[] = {
 ec_pdo_info_t slave_pdos[] = {
     { 0x1600, 5, slave1_output_pdo_entries },
     { 0x1a00, 5, slave1_input_pdo_entries },
-    { 0x1600, 5, slave1_output_pdo_entries },
-    { 0x1a00, 5, slave1_input_pdo_entries },
 };
 
-ec_sync_info_t slave_syncs[] = {
-    { 1, EC_DIR_OUTPUT, 1, &slave_pdos[0], EC_WD_DISABLE },
-    { 1, EC_DIR_INPUT, 1, &slave_pdos[1], EC_WD_DISABLE },
-    { 2, EC_DIR_OUTPUT, 1, &slave_pdos[2], EC_WD_DISABLE },
-    { 2, EC_DIR_INPUT, 1, &slave_pdos[3], EC_WD_DISABLE },
+ec_sync_info_t cia402_syncs[] =
+{
+    { 2, EC_DIR_OUTPUT, 1, &slave_pdos[0], EC_WD_DISABLE },
+    { 3, EC_DIR_INPUT, 1, &slave_pdos[1], EC_WD_DISABLE },
 };
 
-static void sv660n_pdo_config(struct ec_master *master, int slave_counts)
+static ec_pdo_entry_info_t eio_output1_pdo_entries[] =
 {
-    uint32_t index = 0;
-    uint32_t pdo_index;
-    uint32_t i = 0;
+    { 0x3101, 0x01, 8 },
+};
 
-    for (size_t i = 1; i <= slave_counts; i++)
-    {
-        if (master->dc_type)
-        {
-            ecat_dc_config_ex(master, i, master->dc_active,
-                master->dc_cycltime0, master->dc_cycltime1,
-                master->dc_cyclshift); // SYNC0 on slave 1
-        }
-        else
-        {
-            ecat_dc_config(master, i, master->dc_active,
-                master->dc_cycltime0, master->dc_cyclshift); // SYNC0 on slave 1
-        }
-    }
+static ec_pdo_entry_info_t eio_output2_pdo_entries[] =
+{
+    { 0x3101, 0x02, 8 },
+};
 
-    for (i = 0; i < sizeof(slave_syncs) / sizeof(ec_sync_info_t); i++)
-    {
-        if (slave_syncs[i].slave_pos != 0xffff)
-        {
-            if (slave_syncs[i].dir == EC_DIR_OUTPUT)
-            {
-                pdo_index = 0;
-                // 1c12.0
-                ecat_sdo_write_u32(master, slave_syncs[i].slave_pos, 0x1c12, 0,
-                    pdo_index, CSP_TIMEOUTRXM);
-                while (pdo_index < slave_syncs[i].n_pdos)
-                {
-                    const ec_pdo_info_t *pdo_info =
-                        &slave_syncs[i].pdos[pdo_index];
-                    index = 0;
-                    // 1c12.0
-                    ecat_sdo_write_u16(master, slave_syncs[i].slave_pos, 0x1c12,
-                        pdo_index + 1, pdo_info->index, CSP_TIMEOUTRXM);
-                    ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                        pdo_info->index, index, 0, CSP_TIMEOUTRXM);
-                    while (index < pdo_info->n_entries)
-                    {
-                        uint32_t sdo_data =
-                            (pdo_info->entries[index].index << 16) |
-                            (pdo_info->entries[index].subindex << 8) |
-                            pdo_info->entries[index].bit_length;
-                        ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                            pdo_info->index, index + 1, sdo_data,
-                            CSP_TIMEOUTRXM);
-                        index++;
-                    }
-                    ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                        pdo_info->index, 0, index, CSP_TIMEOUTRXM);
-                    pdo_index++;
-                }
-                // 1c12.0
-                ecat_sdo_write_u32(master, slave_syncs[i].slave_pos, 0x1c12, 0,
-                    pdo_index, CSP_TIMEOUTRXM);
-            }
-            else if (slave_syncs[i].dir == EC_DIR_INPUT)
-            {
-                pdo_index = 0;
-                // 1c13.0
-                ecat_sdo_write_u32(master, slave_syncs[i].slave_pos, 0x1c13, 0,
-                    pdo_index, CSP_TIMEOUTRXM);
-                while (pdo_index < slave_syncs[i].n_pdos)
-                {
-                    const ec_pdo_info_t *pdo_info =
-                        &slave_syncs[i].pdos[pdo_index];
-                    index = 0;
-                    // 1c13.0
-                    ecat_sdo_write_u16(master, slave_syncs[i].slave_pos, 0x1c13,
-                        pdo_index + 1, pdo_info->index, CSP_TIMEOUTRXM);
-                    ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                        pdo_info->index, index, 0, CSP_TIMEOUTRXM);
-                    while (index < pdo_info->n_entries)
-                    {
-                        uint32_t sdo_data =
-                            (pdo_info->entries[index].index << 16) |
-                            (pdo_info->entries[index].subindex << 8) |
-                            pdo_info->entries[index].bit_length;
-                        ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                            pdo_info->index, index + 1, sdo_data,
-                            CSP_TIMEOUTRXM);
-                        index++;
-                    }
-                    ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                        pdo_info->index, 0, index, CSP_TIMEOUTRXM);
-                    pdo_index++;
-                }
-                // 1c13.0
-                ecat_sdo_write_u32(master, slave_syncs[i].slave_pos, 0x1c13, 0,
-                    pdo_index, CSP_TIMEOUTRXM);
-            }
-        }
-    }
-}
+static ec_pdo_entry_info_t eio_input1_pdo_entries[] =
+{
+    { 0x3001, 0x01, 8 },
+};
+static ec_pdo_entry_info_t eio_input2_pdo_entries[] =
+{
+    { 0x3001, 0x02, 8 },
+};
+
+ec_pdo_info_t eio_pdos[] = {
+    { 0x1a00, 1, eio_output1_pdo_entries },
+    { 0x1a01, 1, eio_output2_pdo_entries },
+    { 0x1600, 1, eio_input1_pdo_entries },
+    { 0x1601, 1, eio_input2_pdo_entries },
+};
+
+ec_sync_info_t eio_syncs[] =
+{
+    { 0, EC_DIR_OUTPUT, 1, &eio_pdos[0], EC_WD_DISABLE },
+    { 1, EC_DIR_OUTPUT, 1, &eio_pdos[1], EC_WD_DISABLE },
+    { 2, EC_DIR_INPUT, 2, &eio_pdos[2], EC_WD_DISABLE },
+};
 
 static void servo_switch_op(struct rpdo_csp *rmap, struct tpdo_csp *tmap)
 {
@@ -208,19 +134,6 @@ static void servo_switch_op(struct rpdo_csp *rmap, struct tpdo_csp *tmap)
     }
 }
 
-rt_inline struct rpdo_csp *servo_rpdo_get(ec_master_t *mater, int slave)
-{
-    return (struct rpdo_csp *)(mater->process_data +
-        sizeof(struct rpdo_csp) * (slave - 1));
-}
-
-rt_inline struct tpdo_csp *servo_tpdo_get(
-    ec_master_t *mater, int slave_count, int slave)
-{
-    return (struct tpdo_csp *)(mater->process_data +
-        sizeof(struct rpdo_csp) * slave_count +
-        sizeof(struct tpdo_csp) * (slave - 1));
-}
 
 static int sv660n_csp_mode(const char *ifname)
 {
@@ -242,114 +155,71 @@ static int sv660n_csp_mode(const char *ifname)
         return err;
     }
 
-    err = ecat_config_init(&csp_master, RT_FALSE);
-    if (err)
-    {
-        rt_kprintf("ethercat master init failed, err:%d\n", err);
-        return err;
-    }
-
     slave_counts = ecat_slavecount(&csp_master);
     rt_kprintf("Found slaves count:%d\n", slave_counts);
 
-    err = ecat_write_state(&csp_master, 0, EC_STATE_PRE_OP);
-    if (err)
-    {
-        rt_kprintf("ecat_write_state PRE_OP failed\n");
-        return err;
-    }
-
-    state = EC_STATE_PRE_OP;
-    err = ecat_check_state(&csp_master, 0, &state, 2000000 * 3);
-    if (err != RT_EOK)
-    {
-        rt_kprintf("Not all slaves reached PRE_OP state.\n");
-        return err;
-    }
+    static ec_slave_config_t slave_cia402_config;
 
-    ecat_config_dc(&csp_master);
+    slave_cia402_config.dc_assign_activate = 0x300;
+    slave_cia402_config.dc_sync[0].cycle_time = csp_master.main_cycletime_us * 1000;
+    slave_cia402_config.dc_sync[0].shift_time = 500000;
+    slave_cia402_config.dc_sync[1].cycle_time = 0;
+    slave_cia402_config.dc_sync[1].shift_time = 0;
+    slave_cia402_config.sync = cia402_syncs;
+    slave_cia402_config.sync_count = sizeof(cia402_syncs) / sizeof(ec_sync_info_t);
 
-    sv660n_pdo_config(&csp_master, MOTOR_NUM);
+    static ec_slave_config_t slave_eio_config;
 
-    err = ecat_config_map_group(
-        &csp_master, (void *)(csp_master.process_data), 0);
-    if (err != RT_EOK)
-    {
-        rt_kprintf("ecat_config_map_group failed\n");
-        return err;
-    }
+    slave_eio_config.dc_assign_activate = 0x300;
+    slave_eio_config.dc_sync[0].cycle_time = csp_master.main_cycletime_us * 1000;
+    slave_eio_config.dc_sync[0].shift_time = 500000;
+    slave_eio_config.dc_sync[1].cycle_time = 0;
+    slave_eio_config.dc_sync[1].shift_time = 0;
+    slave_eio_config.sync = eio_syncs;
+    slave_eio_config.sync_count = sizeof(eio_syncs) / sizeof(ec_sync_info_t);
 
     for(int i = 0; i < slave_counts; i++)
     {
-        ecat_slave_info(&csp_master, i+1, &info[i]);
+        ecat_slave_info(&csp_master, i, &info[i]);
+        if(info[i].vendor_id == 0xee000002) {
+		    // IO
+            ecat_slave_config(&csp_master, i, &slave_eio_config);
+        }else {
+		    // cia402
+            ecat_slave_config(&csp_master, i, &slave_cia402_config);
+        }
     }
 
-    err = ecat_write_state(&csp_master, 0, EC_STATE_SAFE_OP);
-    if (err != RT_EOK)
-    {
-        rt_kprintf("ecat_write_state PRE_OP failed\n");
-        return err;
-    }
+    ecat_master_start(&csp_master);
 
-    state = EC_STATE_SAFE_OP;
-    err = ecat_check_state(&csp_master, 0, &state, 20000000 * 3);
-    if (err != RT_EOK)
+    for(int i = 0; i < slave_counts; i++)
     {
-        rt_kprintf("Not all slaves reached SAFE_OP state.%d\n", err);
-        return err;
+        ecat_slave_info(&csp_master, i, &info[i]);
     }
 
-    err = ecat_write_state(&csp_master, 0, EC_STATE_OPERATIONAL);
+    state = EC_STATE_OPERATIONAL;
+    err = ecat_check_state(&csp_master, slave_counts - 1, &state, 20000000 * 3);
     if (err != RT_EOK)
     {
-        rt_kprintf("ecat_write_state PRE_OP failed\n");
+        rt_kprintf("Not all slaves reached operational mode.\n");
         return err;
     }
 
+    rt_kprintf("Motor CSP mode control started...\n");
+
     struct rpdo_csp *rmap;
     struct tpdo_csp *tmap;
 
-    /* swith mode */
-    int _chk = 400;
-    do
-    {
-        for (size_t slave = 1; slave <= slave_counts; slave++)
-        {
-            rmap = (struct rpdo_csp *)(info[slave - 1].outputs);
-            tmap = (struct tpdo_csp *)(info[slave - 1].inputs);
-
-            if (slave != 3)
-            {
-                rmap->mode_byte = 0x8;
-                servo_switch_op(rmap, tmap);
-
-            }
-        }
-
-        ecat_send_processdata_group(&csp_master, 0);
-        ecat_receive_processdata_group(&csp_master, 0, 2000000 * 3);
-        state = EC_STATE_OPERATIONAL;
-    } while (
-        _chk-- && (ecat_check_state(&csp_master, 0, &state, 2000) != RT_EOK));
-    if (_chk < 0)
-    {
-        rt_kprintf("Not all slaves reached operational mode.\n");
-        return _chk;
-    }
-
-    struct ecat_timer t;
-    ecat_timer_start(&t, 1000);
-
     while (1)
     {
         if (servo_run == 0)
         {
-            for (size_t slave = 1; slave <= slave_counts; slave++)
+            for (size_t slave = 0; slave < slave_counts; slave++)
             {
-                rmap = (struct rpdo_csp *)(info[slave - 1].outputs);
-                tmap = (struct tpdo_csp *)(info[slave - 1].inputs);
+                rmap = (struct rpdo_csp *)(info[slave].outputs);
+                tmap = (struct tpdo_csp *)(info[slave].inputs);
 
-                if (slave != 3)
+                if (info[slave].vendor_id != 0xee000002)
                 {
                     servo_switch_op(rmap, tmap);
                     rmap->control_word = 0x2;
@@ -358,19 +228,17 @@ static int sv660n_csp_mode(const char *ifname)
             goto stop;
         }
 
-        ecat_send_processdata_group(&csp_master, 0);
-        ecat_receive_processdata_group(&csp_master, 0, 2000 * 10);
-    
-        for (size_t slave = 1; slave <= slave_counts; slave++)
+        for (size_t slave = 0; slave < slave_counts; slave++)
         {
-            rmap = (struct rpdo_csp *)(info[slave - 1].outputs);
-            tmap = (struct tpdo_csp *)(info[slave - 1].inputs);
+            rmap = (struct rpdo_csp *)(info[slave].outputs);
+            tmap = (struct tpdo_csp *)(info[slave].inputs);
 
-            if (slave != 3)
+            if (info[slave].vendor_id != 0xee000002)
             {
                 servo_switch_op(rmap, tmap);
                 if (rmap->control_word == 7)
                 {
+                    rmap->mode_byte = 0x8;
                     rmap->dest_pos = tmap->cur_pos;
                 }
                 if (rmap->control_word == 0xf)
@@ -401,12 +269,8 @@ static int sv660n_csp_mode(const char *ifname)
             }
         }
 
-        while (ecat_timer_is_expired(&t) == RT_FALSE);
-        ecat_timer_start(&t, 1000);
 stop:
-        ecat_send_processdata_group(&csp_master, 0);
-        ecat_receive_processdata_group(&csp_master, 0, 2000 * 10);
-        rt_thread_delay(1);
+        rt_thread_mdelay(10);
     }
 
     return 0;

+ 31 - 193
06_bus_ethercat_master_csp/applications/ecat_service/ethercat_csp.c

@@ -34,6 +34,8 @@ struct tpdo_csp
 };
 #pragma pack(pop)
 
+#define PDO_SIZE (sizeof(struct rpdo_csp) + sizeof(struct tpdo_csp))
+
 static uint8_t servo_run = 0;
 static uint8_t servo_dir = 1;
 static uint8_t process_data[4096];
@@ -74,116 +76,13 @@ static ec_pdo_entry_info_t slave1_input_pdo_entries[] = {
 ec_pdo_info_t slave_pdos[] = {
     { 0x1600, 5, slave1_output_pdo_entries },
     { 0x1a00, 5, slave1_input_pdo_entries },
-    { 0x1600, 5, slave1_output_pdo_entries },
-    { 0x1a00, 5, slave1_input_pdo_entries },
 };
 
 ec_sync_info_t slave_syncs[] = {
-    { 1, EC_DIR_OUTPUT, 1, &slave_pdos[0], EC_WD_DISABLE },
-    { 1, EC_DIR_INPUT, 1, &slave_pdos[1], EC_WD_DISABLE },
-    { 2, EC_DIR_OUTPUT, 1, &slave_pdos[2], EC_WD_DISABLE },
-    { 2, EC_DIR_INPUT, 1, &slave_pdos[3], EC_WD_DISABLE },
+    { 2, EC_DIR_OUTPUT, 1, &slave_pdos[0], EC_WD_DISABLE },
+    { 3, EC_DIR_INPUT, 1, &slave_pdos[1], EC_WD_DISABLE },
 };
 
-static void sv660n_pdo_config(struct ec_master *master, int slave_counts)
-{
-    uint32_t index = 0;
-    uint32_t pdo_index;
-    uint32_t i = 0;
-
-    for (size_t i = 1; i <= slave_counts; i++)
-    {
-        if (master->dc_type)
-        {
-            ecat_dc_config_ex(master, i, master->dc_active,
-                master->dc_cycltime0, master->dc_cycltime1,
-                master->dc_cyclshift); // SYNC0 on slave 1
-        }
-        else
-        {
-            ecat_dc_config(master, i, master->dc_active,
-                master->dc_cycltime0, master->dc_cyclshift); // SYNC0 on slave 1
-        }
-    }
-
-    for (i = 0; i < sizeof(slave_syncs) / sizeof(ec_sync_info_t); i++)
-    {
-        if (slave_syncs[i].slave_pos != 0xffff)
-        {
-            if (slave_syncs[i].dir == EC_DIR_OUTPUT)
-            {
-                pdo_index = 0;
-                // 1c12.0
-                ecat_sdo_write_u32(master, slave_syncs[i].slave_pos, 0x1c12, 0,
-                    pdo_index, CSP_TIMEOUTRXM);
-                while (pdo_index < slave_syncs[i].n_pdos)
-                {
-                    const ec_pdo_info_t *pdo_info =
-                        &slave_syncs[i].pdos[pdo_index];
-                    index = 0;
-                    // 1c12.0
-                    ecat_sdo_write_u16(master, slave_syncs[i].slave_pos, 0x1c12,
-                        pdo_index + 1, pdo_info->index, CSP_TIMEOUTRXM);
-                    ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                        pdo_info->index, index, 0, CSP_TIMEOUTRXM);
-                    while (index < pdo_info->n_entries)
-                    {
-                        uint32_t sdo_data =
-                            (pdo_info->entries[index].index << 16) |
-                            (pdo_info->entries[index].subindex << 8) |
-                            pdo_info->entries[index].bit_length;
-                        ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                            pdo_info->index, index + 1, sdo_data,
-                            CSP_TIMEOUTRXM);
-                        index++;
-                    }
-                    ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                        pdo_info->index, 0, index, CSP_TIMEOUTRXM);
-                    pdo_index++;
-                }
-                // 1c12.0
-                ecat_sdo_write_u32(master, slave_syncs[i].slave_pos, 0x1c12, 0,
-                    pdo_index, CSP_TIMEOUTRXM);
-            }
-            else if (slave_syncs[i].dir == EC_DIR_INPUT)
-            {
-                pdo_index = 0;
-                // 1c13.0
-                ecat_sdo_write_u32(master, slave_syncs[i].slave_pos, 0x1c13, 0,
-                    pdo_index, CSP_TIMEOUTRXM);
-                while (pdo_index < slave_syncs[i].n_pdos)
-                {
-                    const ec_pdo_info_t *pdo_info =
-                        &slave_syncs[i].pdos[pdo_index];
-                    index = 0;
-                    // 1c13.0
-                    ecat_sdo_write_u16(master, slave_syncs[i].slave_pos, 0x1c13,
-                        pdo_index + 1, pdo_info->index, CSP_TIMEOUTRXM);
-                    ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                        pdo_info->index, index, 0, CSP_TIMEOUTRXM);
-                    while (index < pdo_info->n_entries)
-                    {
-                        uint32_t sdo_data =
-                            (pdo_info->entries[index].index << 16) |
-                            (pdo_info->entries[index].subindex << 8) |
-                            pdo_info->entries[index].bit_length;
-                        ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                            pdo_info->index, index + 1, sdo_data,
-                            CSP_TIMEOUTRXM);
-                        index++;
-                    }
-                    ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                        pdo_info->index, 0, index, CSP_TIMEOUTRXM);
-                    pdo_index++;
-                }
-                // 1c13.0
-                ecat_sdo_write_u32(master, slave_syncs[i].slave_pos, 0x1c13, 0,
-                    pdo_index, CSP_TIMEOUTRXM);
-            }
-        }
-    }
-}
-
 static void servo_switch_op(struct rpdo_csp *rmap, struct tpdo_csp *tmap)
 {
     int sta;
@@ -208,16 +107,14 @@ static void servo_switch_op(struct rpdo_csp *rmap, struct tpdo_csp *tmap)
 
 rt_inline struct rpdo_csp *servo_rpdo_get(ec_master_t *mater, int slave)
 {
-    return (struct rpdo_csp *)(mater->process_data +
-        sizeof(struct rpdo_csp) * (slave - 1));
+    return (struct rpdo_csp *)(mater->process_data + PDO_SIZE * (slave));
 }
 
 rt_inline struct tpdo_csp *servo_tpdo_get(
-    ec_master_t *mater, int slave_count, int slave)
+    ec_master_t *mater, int slave)
 {
-    return (struct tpdo_csp *)(mater->process_data +
-        sizeof(struct rpdo_csp) * slave_count +
-        sizeof(struct tpdo_csp) * (slave - 1));
+    return (struct tpdo_csp *)(mater->process_data + PDO_SIZE * slave +
+        sizeof(struct rpdo_csp));
 }
 
 static int sv660n_csp_mode(const char *ifname)
@@ -240,114 +137,61 @@ static int sv660n_csp_mode(const char *ifname)
         return err;
     }
 
-    err = ecat_config_init(&csp_master, RT_FALSE);
-    if (err)
-    {
-        rt_kprintf("ethercat master init failed, err:%d\n", err);
-        return err;
-    }
-
     slave_counts = ecat_slavecount(&csp_master);
     rt_kprintf("Found slaves count:%d\n", slave_counts);
 
-    err = ecat_write_state(&csp_master, 0, EC_STATE_PRE_OP);
-    if (err)
-    {
-        rt_kprintf("ecat_write_state PRE_OP failed\n");
-        return err;
-    }
-
-    state = EC_STATE_PRE_OP;
-    err = ecat_check_state(&csp_master, 0, &state, 2000000 * 3);
-    if (err != RT_EOK)
-    {
-        rt_kprintf("Not all slaves reached PRE_OP state.\n");
-        return err;
-    }
+    static ec_slave_config_t slave_cia402_config;
 
-    ecat_config_dc(&csp_master);
+    slave_cia402_config.dc_assign_activate = 0x300;
+    slave_cia402_config.dc_sync[0].cycle_time = csp_master.main_cycletime_us * 1000;
+    slave_cia402_config.dc_sync[0].shift_time = 500000;
+    slave_cia402_config.dc_sync[1].cycle_time = 0;
+    slave_cia402_config.dc_sync[1].shift_time = 0;
+    slave_cia402_config.sync = slave_syncs;
+    slave_cia402_config.sync_count = sizeof(slave_syncs) / sizeof(ec_sync_info_t);
 
-    sv660n_pdo_config(&csp_master, slave_counts);
-
-    err = ecat_config_map_group(
-        &csp_master, (void *)(csp_master.process_data), 0);
-    if (err != RT_EOK)
+    for(int i = 0; i < slave_counts; i++)
     {
-        rt_kprintf("ecat_config_map_group failed\n");
-        return err;
+        ecat_slave_config(&csp_master, i, &slave_cia402_config);
     }
 
-    err = ecat_write_state(&csp_master, 0, EC_STATE_SAFE_OP);
-    if (err != RT_EOK)
-    {
-        rt_kprintf("ecat_write_state PRE_OP failed\n");
-        return err;
-    }
+    ecat_master_start(&csp_master);
 
-    state = EC_STATE_SAFE_OP;
-    err = ecat_check_state(&csp_master, 0, &state, 20000000 * 3);
+    state = EC_STATE_OPERATIONAL;
+    err = ecat_check_state(&csp_master, slave_counts - 1, &state, 20000000 * 3);
     if (err != RT_EOK)
     {
-        rt_kprintf("Not all slaves reached SAFE_OP state.%d\n", err);
-        return err;
-    }
-
-    err = ecat_write_state(&csp_master, 0, EC_STATE_OPERATIONAL);
-    if (err != RT_EOK)
-    {
-        rt_kprintf("ecat_write_state PRE_OP failed\n");
+        rt_kprintf("Not all slaves reached operational mode.\n");
         return err;
     }
 
-    struct rpdo_csp *rmap;
+    rt_kprintf("Motor CSP mode control started...\n");
+    
+    struct rpdo_csp* rmap;
     struct tpdo_csp *tmap;
 
-    /* swith mode */
-    int _chk = 400;
-    do
-    {
-        for (size_t slave = 1; slave <= slave_counts; slave++)
-        {
-            rmap = servo_rpdo_get(&csp_master, slave);
-            tmap = servo_tpdo_get(&csp_master, slave_counts, slave);
-            rmap->mode_byte = 0x8;
-            servo_switch_op(rmap, tmap);
-        }
-
-        ecat_send_processdata_group(&csp_master, 0);
-        ecat_receive_processdata_group(&csp_master, 0, 2000000 * 3);
-        state = EC_STATE_OPERATIONAL;
-    } while (
-        _chk-- && (ecat_check_state(&csp_master, 0, &state, 2000) != RT_EOK));
-    if (_chk < 0)
-    {
-        rt_kprintf("Not all slaves reached operational mode.\n");
-        return _chk;
-    }
-
-    ecat_hwtimer_start(&csp_master);
-
     while (1)
     {
         if (servo_run == 0)
         {
-            for (size_t slave = 1; slave <= slave_counts; slave++)
+            for (size_t slave = 0; slave < slave_counts; slave++)
             {
                 rmap = servo_rpdo_get(&csp_master, slave);
-                tmap = servo_tpdo_get(&csp_master, slave_counts, slave);
+                tmap = servo_tpdo_get(&csp_master, slave);
                 servo_switch_op(rmap, tmap);
                 rmap->control_word = 0x2;
             }
             goto stop;
         }
 
-        for (size_t slave = 1; slave <= slave_counts; slave++)
+        for (size_t slave = 0; slave < slave_counts; slave++)
         {
             rmap = servo_rpdo_get(&csp_master, slave);
-            tmap = servo_tpdo_get(&csp_master, slave_counts, slave);
+            tmap = servo_tpdo_get(&csp_master, slave);
             servo_switch_op(rmap, tmap);
             if (rmap->control_word == 7)
             {
+                rmap->mode_byte = 0x8;
                 rmap->dest_pos = tmap->cur_pos;
             }
             if (rmap->control_word == 0xf)
@@ -356,21 +200,15 @@ static int sv660n_csp_mode(const char *ifname)
                 if (servo_dir == 0)
                 {
                     rmap->dest_pos -= 1000;
-                    rmap->dest_speed = (1 << 17);
-                    rmap->dest_torque = 1000;
                 }
                 else
                 {
-                    rmap->dest_speed = (1 << 17);
-                    rmap->dest_torque = 1000;
                     rmap->dest_pos += 1000;
                 }
             }
         }
 stop:
-        ecat_send_processdata_group(&csp_master, 0);
-        ecat_receive_processdata_group(&csp_master, 0, 2000 * 10);
-        ecat_sync_dc(&csp_master);
+        rt_thread_mdelay(5);
     }
 
     return 0;

+ 31 - 200
06_bus_ethercat_master_cst/applications/ecat_service/ethercat_cst.c

@@ -37,6 +37,8 @@ struct tpdo_cst
 };
 #pragma pack(pop)
 
+#define PDO_SIZE (sizeof(struct rpdo_cst) + sizeof(struct tpdo_cst))
+
 static uint8_t servo_run = 0;
 static uint8_t servo_dir = 0;
 static uint8_t process_data[4096];
@@ -80,117 +82,13 @@ static ec_pdo_entry_info_t slave1_txpdo_entries[] = {
 ec_pdo_info_t slave_pdos[] = {
     { 0x1600, 8, slave1_rxpdo_entries },
     { 0x1a00, 5, slave1_txpdo_entries },
-    { 0x1600, 8, slave1_rxpdo_entries },
-    { 0x1a00, 5, slave1_txpdo_entries },
-};
-
-ec_sync_info_t slave_syncs[] = {
-    { 1, EC_DIR_OUTPUT, 1, &slave_pdos[0], EC_WD_DISABLE },
-    { 1, EC_DIR_INPUT, 1, &slave_pdos[1], EC_WD_DISABLE },
-    { 2, EC_DIR_OUTPUT, 1, &slave_pdos[2], EC_WD_DISABLE },
-    { 2, EC_DIR_INPUT, 1, &slave_pdos[3], EC_WD_DISABLE },
 };
 
-static int sv660n_pdo_config(ec_master_t *master, int slave_counts)
+ec_sync_info_t cia402_syncs[] =
 {
-    uint32_t index = 0;
-    uint32_t pdo_index;
-    uint32_t i = 0;
-
-    for (size_t i = 1; i <= slave_counts; i++)
-    {
-        if (master->dc_type)
-        {
-            ecat_dc_config_ex(master, i, master->dc_active,
-                master->dc_cycltime0, master->dc_cycltime1,
-                master->dc_cyclshift); // SYNC0 on slave 1
-        }
-        else
-        {
-            ecat_dc_config(master, i, master->dc_active,
-                master->dc_cycltime0, master->dc_cyclshift); // SYNC0 on slave 1
-        }
-    }
-
-    for (i = 0; i < sizeof(slave_syncs) / sizeof(ec_sync_info_t); i++)
-    {
-        if (slave_syncs[i].slave_pos != 0xffff)
-        {
-            if (slave_syncs[i].dir == EC_DIR_OUTPUT)
-            {
-                pdo_index = 0;
-                // 1c12.0
-                ecat_sdo_write_u32(master, slave_syncs[i].slave_pos, 0x1c12, 0,
-                    pdo_index, CST_TIMEOUTRXM);
-                while (pdo_index < slave_syncs[i].n_pdos)
-                {
-                    const ec_pdo_info_t *pdo_info =
-                        &slave_syncs[i].pdos[pdo_index];
-                    index = 0;
-                    // 1c12.0
-                    ecat_sdo_write_u16(master, slave_syncs[i].slave_pos, 0x1c12,
-                        pdo_index + 1, pdo_info->index, CST_TIMEOUTRXM);
-                    ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                        pdo_info->index, index, 0, CST_TIMEOUTRXM);
-                    while (index < pdo_info->n_entries)
-                    {
-                        uint32_t sdo_data =
-                            (pdo_info->entries[index].index << 16) |
-                            (pdo_info->entries[index].subindex << 8) |
-                            pdo_info->entries[index].bit_length;
-                        ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                            pdo_info->index, index + 1, sdo_data,
-                            CST_TIMEOUTRXM);
-                        index++;
-                    }
-                    ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                        pdo_info->index, 0, index, CST_TIMEOUTRXM);
-                    pdo_index++;
-                }
-                // 1c12.0
-                ecat_sdo_write_u32(master, slave_syncs[i].slave_pos, 0x1c12, 0,
-                    pdo_index, CST_TIMEOUTRXM);
-            }
-            else if (slave_syncs[i].dir == EC_DIR_INPUT)
-            {
-                pdo_index = 0;
-                // 1c13.0
-                ecat_sdo_write_u32(master, slave_syncs[i].slave_pos, 0x1c13, 0,
-                    pdo_index, CST_TIMEOUTRXM);
-                while (pdo_index < slave_syncs[i].n_pdos)
-                {
-                    const ec_pdo_info_t *pdo_info =
-                        &slave_syncs[i].pdos[pdo_index];
-                    index = 0;
-                    // 1c13.0
-                    ecat_sdo_write_u16(master, slave_syncs[i].slave_pos, 0x1c13,
-                        pdo_index + 1, pdo_info->index, CST_TIMEOUTRXM);
-                    ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                        pdo_info->index, index, 0, CST_TIMEOUTRXM);
-                    while (index < pdo_info->n_entries)
-                    {
-                        uint32_t sdo_data =
-                            (pdo_info->entries[index].index << 16) |
-                            (pdo_info->entries[index].subindex << 8) |
-                            pdo_info->entries[index].bit_length;
-                        ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                            pdo_info->index, index + 1, sdo_data,
-                            CST_TIMEOUTRXM);
-                        index++;
-                    }
-                    ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                        pdo_info->index, 0, index, CST_TIMEOUTRXM);
-                    pdo_index++;
-                }
-                // 1c13.0
-                ecat_sdo_write_u32(master, slave_syncs[i].slave_pos, 0x1c13, 0,
-                    pdo_index, CST_TIMEOUTRXM);
-            }
-        }
-    }
-
-    return 0;
-}
+    { 2, EC_DIR_OUTPUT, 1, &slave_pdos[0], EC_WD_DISABLE },
+    { 3, EC_DIR_INPUT, 1, &slave_pdos[1], EC_WD_DISABLE },
+};
 
 static void servo_switch_op(struct rpdo_cst *rmap, struct tpdo_cst *tmap)
 {
@@ -216,16 +114,14 @@ static void servo_switch_op(struct rpdo_cst *rmap, struct tpdo_cst *tmap)
 
 rt_inline struct rpdo_cst *servo_rpdo_get(ec_master_t *mater, int slave)
 {
-    return (struct rpdo_cst *)(mater->process_data +
-        sizeof(struct rpdo_cst) * (slave - 1));
+    return (struct rpdo_cst *)(mater->process_data + PDO_SIZE * (slave));
 }
 
 rt_inline struct tpdo_cst *servo_tpdo_get(
-    ec_master_t *mater, int slave_count, int slave)
+    ec_master_t *mater, int slave)
 {
-    return (struct tpdo_cst *)(mater->process_data +
-        sizeof(struct rpdo_cst) * slave_count +
-        sizeof(struct tpdo_cst) * (slave - 1));
+    return (struct tpdo_cst *)(mater->process_data + PDO_SIZE * slave +
+        sizeof(struct rpdo_cst));
 }
 
 static int sv660n_cst_mode(const char *ifname)
@@ -248,111 +144,57 @@ static int sv660n_cst_mode(const char *ifname)
         return err;
     }
 
-    err = ecat_config_init(&cst_master, RT_FALSE);
-    if (err)
-    {
-        rt_kprintf("ethercat master init failed, err:%d\n", err);
-        goto cfg_init_err;
-    }
-
     slave_counts = ecat_slavecount(&cst_master);
     rt_kprintf("Found slaves count:%d\n", slave_counts);
 
-    err = ecat_write_state(&cst_master, 0, EC_STATE_PRE_OP);
-    if (err)
-    {
-        rt_kprintf("ecat_write_state PRE_OP failed\n");
-        goto write_per_op_err;
-    }
-
-    state = EC_STATE_PRE_OP;
-    err = ecat_check_state(&cst_master, 0, &state, 2000000 * 3);
-    if (err != RT_EOK)
-    {
-        rt_kprintf("Not all slaves reached PRE_OP state.\n");
-        goto check_per_op_err;
-    }
-
-    ecat_config_dc(&cst_master);
+    static ec_slave_config_t slave_cia402_config;
 
-    sv660n_pdo_config(&cst_master, slave_counts);
+    slave_cia402_config.dc_assign_activate = 0x300;
+    slave_cia402_config.dc_sync[0].cycle_time = cst_master.main_cycletime_us * 1000;
+    slave_cia402_config.dc_sync[0].shift_time = 500000;
+    slave_cia402_config.dc_sync[1].cycle_time = 0;
+    slave_cia402_config.dc_sync[1].shift_time = 0;
+    slave_cia402_config.sync = cia402_syncs;
+    slave_cia402_config.sync_count = sizeof(cia402_syncs) / sizeof(ec_sync_info_t);
 
-    err = ecat_config_map_group(
-        &cst_master, (void *)(cst_master.process_data), 0);
-    if (err != RT_EOK)
+    for(int i=0;i<slave_counts;i++)
     {
-        rt_kprintf("ecat_config_map_group failed\n");
-        goto map_err;
+        ecat_slave_config(&cst_master, i, &slave_cia402_config);
     }
 
-    err = ecat_write_state(&cst_master, 0, EC_STATE_SAFE_OP);
-    if (err != RT_EOK)
-    {
-        rt_kprintf("ecat_write_state PRE_OP failed\n");
-        goto write_safe_op_err;
-    }
+    ecat_master_start(&cst_master);
 
-    state = EC_STATE_SAFE_OP;
-    err = ecat_check_state(&cst_master, 0, &state, 20000000 * 3);
+    state = EC_STATE_OPERATIONAL;
+    err = ecat_check_state(&cst_master, slave_counts - 1, &state, 20000000 * 3);
     if (err != RT_EOK)
     {
-        rt_kprintf("Not all slaves reached SAFE_OP state.%d\n", err);
-        goto check_safe_op_err;
+        rt_kprintf("Not all slaves reached operational mode.\n");
+        return err;
     }
 
-    err = ecat_write_state(&cst_master, 0, EC_STATE_OPERATIONAL);
-    if (err != RT_EOK)
-    {
-        rt_kprintf("ecat_write_state PRE_OP failed\n");
-        goto write_op_err;
-    }
+    rt_kprintf("Motor CST mode control started...\n");
 
     struct rpdo_cst *rmap;
     struct tpdo_cst *tmap;
 
-    /* swith mode */
-    int _chk = 400;
-    do
-    {
-        for (size_t slave = 1; slave <= slave_counts; slave++)
-        {
-            rmap = servo_rpdo_get(&cst_master, slave);
-            tmap = servo_tpdo_get(&cst_master, slave_counts, slave);
-            rmap->mode_of_operation = 0xA;
-            servo_switch_op(rmap, tmap);
-        }
-
-        ecat_send_processdata_group(&cst_master, 0);
-        ecat_receive_processdata_group(&cst_master, 0, 2000000 * 3);
-        state = EC_STATE_OPERATIONAL;
-    } while (
-        _chk-- && (ecat_check_state(&cst_master, 0, &state, 2000) != RT_EOK));
-    if (_chk < 0)
-    {
-        rt_kprintf("Not all slaves reached operational mode.\n");
-        return _chk;
-    }
-
-    ecat_hwtimer_start(&cst_master);
-
     while (1)
     {
         if (servo_run == 0)
         {
-            for (size_t slave = 1; slave <= slave_counts; slave++)
+            for (size_t slave = 0; slave < slave_counts; slave++)
             {
                 rmap = servo_rpdo_get(&cst_master, slave);
-                tmap = servo_tpdo_get(&cst_master, slave_counts, slave);
+                tmap = servo_tpdo_get(&cst_master, slave);
                 servo_switch_op(rmap, tmap);
                 rmap->control_word = 0x2;
             }
             goto stop;
         }
 
-        for (size_t slave = 1; slave <= slave_counts; slave++)
+        for (size_t slave = 0; slave < slave_counts; slave++)
         {
             rmap = servo_rpdo_get(&cst_master, slave);
-            tmap = servo_tpdo_get(&cst_master, slave_counts, slave);
+            tmap = servo_tpdo_get(&cst_master, slave);
 
             if (rmap->control_word == 7)
             {
@@ -376,20 +218,9 @@ static int sv660n_cst_mode(const char *ifname)
             servo_switch_op(rmap, tmap);
         }
 stop:
-        ecat_send_processdata_group(&cst_master, 0);
-        ecat_receive_processdata_group(&cst_master, 0, 2000 * 10);
-        ecat_sync_dc(&cst_master);
+        rt_thread_mdelay(5);
     }
-
     return 0;
-write_op_err:
-check_safe_op_err:
-write_safe_op_err:
-map_err:
-check_per_op_err:
-write_per_op_err:
-cfg_init_err:
-    return -1;
 }
 
 static void ethercat_entry(void *pram)

+ 29 - 200
06_bus_ethercat_master_csv/applications/ecat_service/ethercat_csv.c

@@ -30,6 +30,8 @@ struct tpdo_csv
 };
 #pragma pack(pop)
 
+#define PDO_SIZE (sizeof(struct rpdo_csv) + sizeof(struct tpdo_csv))
+    
 static uint8_t servo_run = 0;
 static uint8_t servo_dir = 0;
 static uint8_t process_data[4096];
@@ -67,118 +69,13 @@ static ec_pdo_entry_info_t slave1_txpdo_entries[] = {
 ec_pdo_info_t slave_pdos[] = {
     { 0x1600, 3, slave1_rxpdo_entries },
     { 0x1a00, 4, slave1_txpdo_entries },
-    { 0x1600, 3, slave1_rxpdo_entries },
-    { 0x1a00, 4, slave1_txpdo_entries },
 };
 
 ec_sync_info_t slave_syncs[] = {
-    { 1, EC_DIR_OUTPUT, 1, &slave_pdos[0], EC_WD_DISABLE },
-    { 1, EC_DIR_INPUT, 1, &slave_pdos[1], EC_WD_DISABLE },
-    { 2, EC_DIR_OUTPUT, 1, &slave_pdos[2], EC_WD_DISABLE },
-    { 2, EC_DIR_INPUT, 1, &slave_pdos[3], EC_WD_DISABLE },
+    { 2, EC_DIR_OUTPUT, 1, &slave_pdos[0], EC_WD_DISABLE },
+    { 3, EC_DIR_INPUT, 1, &slave_pdos[1], EC_WD_DISABLE },
 };
 
-static int sv660n_pdo_config(ec_master_t *master, int slave_counts)
-{
-    uint32_t index = 0;
-    uint32_t pdo_index;
-    uint32_t i = 0;
-
-    for (size_t i = 1; i <= slave_counts; i++)
-    {
-        if (master->dc_type)
-        {
-            ecat_dc_config_ex(master, i, master->dc_active,
-                master->dc_cycltime0, master->dc_cycltime1,
-                master->dc_cyclshift); // SYNC0 on slave 1
-        }
-        else
-        {
-            ecat_dc_config(master, i, master->dc_active,
-                master->dc_cycltime0, master->dc_cyclshift); // SYNC0 on slave 1
-        }
-    }
-
-    for (i = 0; i < sizeof(slave_syncs) / sizeof(ec_sync_info_t); i++)
-    {
-        if (slave_syncs[i].slave_pos != 0xffff)
-        {
-            if (slave_syncs[i].dir == EC_DIR_OUTPUT)
-            {
-                pdo_index = 0;
-                // 1c12.0
-                ecat_sdo_write_u32(master, slave_syncs[i].slave_pos, 0x1c12, 0,
-                    pdo_index, CSV_TIMEOUTRXM);
-                while (pdo_index < slave_syncs[i].n_pdos)
-                {
-                    const ec_pdo_info_t *pdo_info =
-                        &slave_syncs[i].pdos[pdo_index];
-                    index = 0;
-                    // 1c12.0
-                    ecat_sdo_write_u16(master, slave_syncs[i].slave_pos, 0x1c12,
-                        pdo_index + 1, pdo_info->index, CSV_TIMEOUTRXM);
-                    ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                        pdo_info->index, index, 0, CSV_TIMEOUTRXM);
-                    while (index < pdo_info->n_entries)
-                    {
-                        uint32_t sdo_data =
-                            (pdo_info->entries[index].index << 16) |
-                            (pdo_info->entries[index].subindex << 8) |
-                            pdo_info->entries[index].bit_length;
-                        ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                            pdo_info->index, index + 1, sdo_data,
-                            CSV_TIMEOUTRXM);
-                        index++;
-                    }
-                    ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                        pdo_info->index, 0, index, CSV_TIMEOUTRXM);
-                    pdo_index++;
-                }
-                // 1c12.0
-                ecat_sdo_write_u32(master, slave_syncs[i].slave_pos, 0x1c12, 0,
-                    pdo_index, CSV_TIMEOUTRXM);
-            }
-            else if (slave_syncs[i].dir == EC_DIR_INPUT)
-            {
-                pdo_index = 0;
-                // 1c13.0
-                ecat_sdo_write_u32(master, slave_syncs[i].slave_pos, 0x1c13, 0,
-                    pdo_index, CSV_TIMEOUTRXM);
-                while (pdo_index < slave_syncs[i].n_pdos)
-                {
-                    const ec_pdo_info_t *pdo_info =
-                        &slave_syncs[i].pdos[pdo_index];
-                    index = 0;
-                    // 1c13.0
-                    ecat_sdo_write_u16(master, slave_syncs[i].slave_pos, 0x1c13,
-                        pdo_index + 1, pdo_info->index, CSV_TIMEOUTRXM);
-                    ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                        pdo_info->index, index, 0, CSV_TIMEOUTRXM);
-                    while (index < pdo_info->n_entries)
-                    {
-                        uint32_t sdo_data =
-                            (pdo_info->entries[index].index << 16) |
-                            (pdo_info->entries[index].subindex << 8) |
-                            pdo_info->entries[index].bit_length;
-                        ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                            pdo_info->index, index + 1, sdo_data,
-                            CSV_TIMEOUTRXM);
-                        index++;
-                    }
-                    ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                        pdo_info->index, 0, index, CSV_TIMEOUTRXM);
-                    pdo_index++;
-                }
-                // 1c13.0
-                ecat_sdo_write_u32(master, slave_syncs[i].slave_pos, 0x1c13, 0,
-                    pdo_index, CSV_TIMEOUTRXM);
-            }
-        }
-    }
-
-    return 0;
-}
-
 static void servo_switch_op(struct rpdo_csv *rmap, struct tpdo_csv *tmap)
 {
     int sta;
@@ -204,16 +101,13 @@ static void servo_switch_op(struct rpdo_csv *rmap, struct tpdo_csv *tmap)
 rt_inline struct rpdo_csv *servo_rpdo_get(ec_master_t *mater, 
     int slave)
 {
-    return (struct rpdo_csv *)(mater->process_data +
-        sizeof(struct rpdo_csv) * (slave - 1));
+    return (struct rpdo_csv *)(mater->process_data + PDO_SIZE * (slave));
 }
 
-rt_inline struct tpdo_csv *servo_tpdo_get(ec_master_t *mater, 
-    int slave_count, int slave)
+rt_inline struct tpdo_csv *servo_tpdo_get(ec_master_t *mater, int slave)
 {
-    return (struct tpdo_csv *)(mater->process_data
-                + sizeof(struct rpdo_csv) * slave_count
-                + sizeof(struct tpdo_csv) * (slave - 1));
+    return (struct tpdo_csv *)(mater->process_data + PDO_SIZE * slave +
+        sizeof(struct rpdo_csv));
 }
 
 static int sv660n_csv_mode(const char *ifname)
@@ -236,111 +130,57 @@ static int sv660n_csv_mode(const char *ifname)
         return err;
     }
 
-    err = ecat_config_init(&csv_master, RT_FALSE);
-    if (err)
-    {
-        rt_kprintf("ethercat master init failed, err:%d\n", err);
-        goto cfg_init_err;
-    }
-
     slave_counts = ecat_slavecount(&csv_master);
     rt_kprintf("Found slaves count:%d\n", slave_counts);
 
-    err = ecat_write_state(&csv_master, 0, EC_STATE_PRE_OP);
-    if (err)
-    {
-        rt_kprintf("ecat_write_state PRE_OP failed\n");
-        goto write_per_op_err;
-    }
+    static ec_slave_config_t slave_cia402_config;
 
-    state = EC_STATE_PRE_OP;
-    err = ecat_check_state(&csv_master, 0, &state, 2000000 * 3);
-    if (err != RT_EOK)
-    {
-        rt_kprintf("Not all slaves reached PRE_OP state.\n");
-        goto check_per_op_err;
-    }
+    slave_cia402_config.dc_assign_activate = 0x300;
+    slave_cia402_config.dc_sync[0].cycle_time = csv_master.main_cycletime_us * 1000;
+    slave_cia402_config.dc_sync[0].shift_time = 500000;
+    slave_cia402_config.dc_sync[1].cycle_time = 0;
+    slave_cia402_config.dc_sync[1].shift_time = 0;
+    slave_cia402_config.sync = slave_syncs;
+    slave_cia402_config.sync_count = sizeof(slave_syncs) / sizeof(ec_sync_info_t);
 
-    ecat_config_dc(&csv_master);
-
-    sv660n_pdo_config(&csv_master, slave_counts);
-
-    err = ecat_config_map_group(
-        &csv_master, (void *)(csv_master.process_data), 0);
-    if (err != RT_EOK)
+    for(int i = 0 ; i < slave_counts; i++)
     {
-        rt_kprintf("ecat_config_map_group failed\n");
-        goto map_err;
+        ecat_slave_config(&csv_master, i, &slave_cia402_config);
     }
 
-    err = ecat_write_state(&csv_master, 0, EC_STATE_SAFE_OP);
-    if (err != RT_EOK)
-    {
-        rt_kprintf("ecat_write_state PRE_OP failed\n");
-        goto write_safe_op_err;
-    }
+    ecat_master_start(&csv_master);
 
-    state = EC_STATE_SAFE_OP;
-    err = ecat_check_state(&csv_master, 0, &state, 20000000 * 3);
+    state = EC_STATE_OPERATIONAL;
+    err = ecat_check_state(&csv_master, slave_counts - 1, &state, 20000000 * 3);
     if (err != RT_EOK)
     {
-        rt_kprintf("Not all slaves reached SAFE_OP state.%d\n", err);
-        goto check_safe_op_err;
+        rt_kprintf("Not all slaves reached operational mode.\n");
+        return err;
     }
 
-    err = ecat_write_state(&csv_master, 0, EC_STATE_OPERATIONAL);
-    if (err != RT_EOK)
-    {
-        rt_kprintf("ecat_write_state PRE_OP failed\n");
-        goto write_op_err;
-    }
+    rt_kprintf("Motor CSV mode control started...\n");
 
     struct rpdo_csv *rmap;
     struct tpdo_csv *tmap;
 
-    /* swith mode */
-    int _chk = 400;
-    do
-    {
-        for (size_t slave = 1; slave <= slave_counts; slave++)
-        {
-            rmap = servo_rpdo_get(&csv_master, slave);
-            tmap = servo_tpdo_get(&csv_master, slave_counts, slave);
-            rmap->mode_of_operation = 0x9;
-            servo_switch_op(rmap, tmap);
-        }
-        
-        ecat_send_processdata_group(&csv_master, 0);
-        ecat_receive_processdata_group(&csv_master, 0, 2000000 * 3);
-        state = EC_STATE_OPERATIONAL;
-    } while (
-        _chk-- && (ecat_check_state(&csv_master, 0, &state, 2000) != RT_EOK));
-    if (_chk < 0)
-    {
-        rt_kprintf("Not all slaves reached operational mode.\n");
-        return _chk;
-    }
-
-    ecat_hwtimer_start(&csv_master);
-
     while (1)
     {
         if (servo_run == 0)
         {
-            for (size_t slave = 1; slave <= slave_counts; slave++)
+            for (size_t slave = 0; slave <= slave_counts; slave++)
             {
                 rmap = servo_rpdo_get(&csv_master, slave);
-                tmap = servo_tpdo_get(&csv_master, slave_counts, slave);
+                tmap = servo_tpdo_get(&csv_master, slave);
                 servo_switch_op(rmap, tmap);
                 rmap->control_word = 0x2;
             }
             goto stop;
         }
 
-        for (size_t slave = 1; slave <= slave_counts; slave++)
+        for (size_t slave = 0; slave <= slave_counts; slave++)
         {
             rmap = servo_rpdo_get(&csv_master, slave);
-            tmap = servo_tpdo_get(&csv_master, slave_counts, slave);
+            tmap = servo_tpdo_get(&csv_master, slave);
             if (rmap->control_word == 7)
             {
                 rmap->mode_of_operation = 0x9;
@@ -359,20 +199,9 @@ static int sv660n_csv_mode(const char *ifname)
             servo_switch_op(rmap, tmap);
         }
 stop:
-        ecat_send_processdata_group(&csv_master, 0);
-        ecat_receive_processdata_group(&csv_master, 0, 2000 * 10);
-        ecat_sync_dc(&csv_master);
+        rt_thread_mdelay(5);
     }
-
     return 0;
-write_op_err:
-check_safe_op_err:
-write_safe_op_err:
-map_err:
-check_per_op_err:
-write_per_op_err:
-cfg_init_err:
-    return -1;
 }
 
 static void ethercat_entry(void *pram)

+ 15 - 168
11_amp_qt_ethercat_master/applications/ecat_service/ethercat_domain.c

@@ -113,8 +113,8 @@ ec_pdo_info_t slave_pdos[] = {
 };
 
 ec_sync_info_t slave_syncs[] = {
-    { 1, EC_DIR_OUTPUT, 1, &slave_pdos[0], EC_WD_DISABLE },
-    { 1, EC_DIR_INPUT, 1, &slave_pdos[1], EC_WD_DISABLE },
+    { 2, EC_DIR_OUTPUT, 1, &slave_pdos[0], EC_WD_DISABLE },
+    { 3, EC_DIR_INPUT, 1, &slave_pdos[1], EC_WD_DISABLE },
 };
 
 static void servo_switch_op(struct rpdo_csp *output, struct tpdo_csp *input)
@@ -146,102 +146,6 @@ static void servo_switch_op(struct rpdo_csp *output, struct tpdo_csp *input)
     }
 }
 
-static void lc_pdo_config(struct ec_master *master)
-{
-    uint32_t index = 0;
-    uint32_t pdo_index;
-    uint32_t i = 0;
-
-    if (master->dc_type)
-    {
-        ecat_dc_config_ex(master, master->dc_index, master->dc_active,
-            master->dc_cycltime0, master->dc_cycltime1,
-            master->dc_cyclshift); // SYNC0 on slave 1
-    }
-    else
-    {
-        ecat_dc_config(master, master->dc_index, master->dc_active,
-            master->dc_cycltime0, master->dc_cyclshift); // SYNC0 on slave 1
-    }
-
-    for (i = 0; i < sizeof(slave_syncs) / sizeof(ec_sync_info_t); i++)
-    {
-        if (slave_syncs[i].slave_pos != 0xffff)
-        {
-            if (slave_syncs[i].dir == EC_DIR_OUTPUT)
-            {
-                pdo_index = 0;
-                // 1c12.0
-                ecat_sdo_write_u32(master, slave_syncs[i].slave_pos, 0x1c12, 0,
-                    pdo_index, EC_TIMEOUTRXM);
-                while (pdo_index < slave_syncs[i].n_pdos)
-                {
-                    const ec_pdo_info_t *pdo_info =
-                        &slave_syncs[i].pdos[pdo_index];
-                    index = 0;
-                    // 1c12.0
-                    ecat_sdo_write_u16(master, slave_syncs[i].slave_pos, 0x1c12,
-                        pdo_index + 1, pdo_info->index, EC_TIMEOUTRXM);
-                    ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                        pdo_info->index, index, 0, EC_TIMEOUTRXM);
-                    while (index < pdo_info->n_entries)
-                    {
-                        uint32_t sdo_data =
-                            (pdo_info->entries[index].index << 16) |
-                            (pdo_info->entries[index].subindex << 8) |
-                            pdo_info->entries[index].bit_length;
-                        ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                            pdo_info->index, index + 1, sdo_data,
-                            EC_TIMEOUTRXM);
-                        index++;
-                    }
-                    ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                        pdo_info->index, 0, index, EC_TIMEOUTRXM);
-                    pdo_index++;
-                }
-                // 1c12.0
-                ecat_sdo_write_u32(master, slave_syncs[i].slave_pos, 0x1c12, 0,
-                    pdo_index, EC_TIMEOUTRXM);
-            }
-            else if (slave_syncs[i].dir == EC_DIR_INPUT)
-            {
-                pdo_index = 0;
-                // 1c13.0
-                ecat_sdo_write_u32(master, slave_syncs[i].slave_pos, 0x1c13, 0,
-                    pdo_index, EC_TIMEOUTRXM);
-                while (pdo_index < slave_syncs[i].n_pdos)
-                {
-                    const ec_pdo_info_t *pdo_info =
-                        &slave_syncs[i].pdos[pdo_index];
-                    index = 0;
-                    // 1c13.0
-                    ecat_sdo_write_u16(master, slave_syncs[i].slave_pos, 0x1c13,
-                        pdo_index + 1, pdo_info->index, EC_TIMEOUTRXM);
-                    ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                        pdo_info->index, index, 0, EC_TIMEOUTRXM);
-                    while (index < pdo_info->n_entries)
-                    {
-                        uint32_t sdo_data =
-                            (pdo_info->entries[index].index << 16) |
-                            (pdo_info->entries[index].subindex << 8) |
-                            pdo_info->entries[index].bit_length;
-                        ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                            pdo_info->index, index + 1, sdo_data,
-                            EC_TIMEOUTRXM);
-                        index++;
-                    }
-                    ecat_sdo_write_u32(master, slave_syncs[i].slave_pos,
-                        pdo_info->index, 0, index, EC_TIMEOUTRXM);
-                    pdo_index++;
-                }
-                // 1c13.0
-                ecat_sdo_write_u32(master, slave_syncs[i].slave_pos, 0x1c13, 0,
-                    pdo_index, EC_TIMEOUTRXM);
-            }
-        }
-    }
-}
-
 static void rpmsg_ethercat_read(void *parameter)
 {
     rt_uint32_t len = 0;
@@ -329,62 +233,26 @@ int ethercat_domain_init(void)
         return err;
     }
 
-    err = ecat_config_init(&csp_master, RT_FALSE);
-    if (err)
-    {
-        rt_kprintf("ethercat master init failed, err:%d\n", err);
-        return err;
-    }
-
     slave_counts = ecat_slavecount(&csp_master);
     rt_kprintf("Found slaves count:%d\n", slave_counts);
 
-    err = ecat_write_state(&csp_master, 0, EC_STATE_PRE_OP);
-    if (err)
-    {
-        rt_kprintf("ecat_write_state PRE_OP failed\n");
-        return err;
-    }
-
-    state = EC_STATE_PRE_OP;
-    err = ecat_check_state(&csp_master, 0, &state, 2000000 * 3);
-    if (err != RT_EOK)
-    {
-        rt_kprintf("Not all slaves reached PRE_OP state.\n");
-        return err;
-    }
-
-    ecat_config_dc(&csp_master);
-
-    lc_pdo_config(&csp_master);
-
-    err = ecat_config_map_group(
-        &csp_master, (void *)(csp_master.process_data), 0);
-    if (err != RT_EOK)
-    {
-        rt_kprintf("ecat_config_map_group failed\n");
-        return err;
-    }
+    static ec_slave_config_t slave_cia402_config;
 
-    err = ecat_write_state(&csp_master, 0, EC_STATE_SAFE_OP);
-    if (err != RT_EOK)
-    {
-        rt_kprintf("ecat_write_state PRE_OP failed\n");
-        return err;
-    }
+    slave_cia402_config.dc_assign_activate = 0x300;
+    slave_cia402_config.dc_sync[0].cycle_time = csp_master.main_cycletime_us * 1000;
+    slave_cia402_config.dc_sync[0].shift_time = 500000;
+    slave_cia402_config.dc_sync[1].cycle_time = 0;
+    slave_cia402_config.dc_sync[1].shift_time = 0;
+    slave_cia402_config.sync = slave_syncs;
+    slave_cia402_config.sync_count = sizeof(slave_syncs) / sizeof(ec_sync_info_t);
+    ecat_slave_config(&csp_master, 0, &slave_cia402_config);
+    ecat_master_start(&csp_master);
 
-    state = EC_STATE_SAFE_OP;
+    state = EC_STATE_OPERATIONAL;
     err = ecat_check_state(&csp_master, 0, &state, 20000000 * 3);
     if (err != RT_EOK)
     {
-        rt_kprintf("Not all slaves reached SAFE_OP state.%d\n", err);
-        return err;
-    }
-
-    err = ecat_write_state(&csp_master, 0, EC_STATE_OPERATIONAL);
-    if (err != RT_EOK)
-    {
-        rt_kprintf("ecat_write_state PRE_OP failed\n");
+        rt_kprintf("Not all slaves reached operational mode.\n");
         return err;
     }
 
@@ -393,20 +261,6 @@ int ethercat_domain_init(void)
         (struct tpdo_csp *)(csp_master.process_data + sizeof(struct rpdo_csp));
     rmap->mode_byte = 0x8;
 
-    /* swith mode */
-    int _chk = 400;
-    do
-    {
-        servo_switch_op(rmap, tmap);
-        ecat_send_processdata_group(&csp_master, 0);
-        ecat_receive_processdata_group(&csp_master, 0, 2000000 * 3);
-        state = EC_STATE_OPERATIONAL;
-    } while (
-        _chk-- && (ecat_check_state(&csp_master, 0, &state, 2000) != RT_EOK));
-
-    struct ecat_timer t;
-    ecat_timer_start(&t, 1000);
-
     while (1)
     {
         servo_switch_op(rmap, tmap);
@@ -479,14 +333,7 @@ int ethercat_domain_init(void)
         ctrl_data.rpm = ctrl_data.ctrl_value * 60000 / 3600;
         rt_sem_release(dynamic_sem);
 
-        ecat_send_processdata_group(&csp_master, 0);
-        ecat_receive_processdata_group(&csp_master, 0, 2000 * 10);
-        
-        while (ecat_timer_is_expired(&t) == RT_FALSE);
-        ecat_timer_start(&t, 1000);
-        ecat_send_processdata_group(&csp_master, 0);
-        ecat_receive_processdata_group(&csp_master, 0, 2000 * 10);
-        rt_thread_delay(1);
+        rt_thread_delay(5);
     }
 
     return 0;

+ 1 - 1
app.yaml

@@ -2159,7 +2159,7 @@ features_zh:
 - 革命性混合架构:RT-Thread+Linux双系统
 pkg_type: Board_Support_Packages
 pkg_vendor: Real-Thread
-pkg_version: 1.7.0
+pkg_version: 1.7.2
 template_projects:
 - builtin_files:
   - files_and_folders:

+ 35 - 0
rt-thread/components/industrial_bus/ethercat/ecat_master.c

@@ -46,6 +46,21 @@ rt_err_t ecat_master_deinit(ec_master_t *master)
     return (-RT_ERROR);
 }
 
+rt_err_t ecat_master_start(ec_master_t *master)
+{
+    if (!master)
+    {
+        return (-RT_EINVAL);
+    }
+
+    if (service != RT_NULL)
+    {
+        return service_control(service, ECAT_SERVICE_MASTER_START, master);
+    }
+
+    return (-RT_ERROR);
+}
+
 rt_err_t ecat_simple_start(ec_master_t *master)
 {
     if (!master)
@@ -134,6 +149,26 @@ rt_err_t ecat_slave_info(
     return (-RT_ERROR);
 }
 
+rt_err_t ecat_slave_config(
+    ec_master_t *master, uint16_t slave, ec_slave_config_t *config)
+{
+    if ((!master) || (!config))
+    {
+        return (-RT_EINVAL);
+    }
+
+    if (service != RT_NULL)
+    {
+        struct ecat_slave_config_arg config_arg;
+        config_arg.master = master;
+        config_arg.config = config;
+        config_arg.slave = slave;
+        return service_control(service, ECAT_SERVICE_SLAVE_CONFIG, &config_arg);
+    }
+
+    return (-RT_ERROR);
+}
+
 int ecat_sdo_write(ec_master_t *master,
     uint16_t slave,
     uint16_t index,

+ 28 - 6
rt-thread/components/industrial_bus/ethercat/ecat_master.h

@@ -14,6 +14,7 @@
 
 #define EC_MAX_STRING_LENGTH (64)
 #define EC_MAX_PORTS         (4)
+
 /** Master state.
  *
  * This is used for the output parameter of ecat_master_state().
@@ -147,10 +148,8 @@ typedef struct
  */
 typedef enum
 {
-    EC_DIR_INVALID, /**< Invalid direction. Do not use this value. */
     EC_DIR_OUTPUT,  /**< Values written by the master. */
     EC_DIR_INPUT,   /**< Values read by the master. */
-    EC_DIR_COUNT    /**< Number of directions. For internal use only. */
 } ec_direction_t;
 
 /****************************************************************************/
@@ -192,7 +191,7 @@ typedef struct
 typedef struct
 {
     uint16_t index;         /**< PDO index. */
-    unsigned int n_entries; /**< Number of PDO entries in \a entries to map.
+    uint32_t n_entries; /**< Number of PDO entries in \a entries to map.
                                           Zero means, that the default mapping shall be
                                           used (this can only be done if the slave is
                                           present at configuration time). */
@@ -211,10 +210,9 @@ typedef struct
  */
 typedef struct
 {
-    uint16_t
-        slave_pos; /**< Slave Index,but can also be \a 0xffff to mark the end of the list. */
+    uint8_t    index;                /**< Sync manager index. */
     ec_direction_t dir;               /**< Sync manager direction. */
-    unsigned int n_pdos;              /**< Number of PDOs in \a pdos. */
+    uint32_t n_pdos;              /**< Number of PDOs in \a pdos. */
     ec_pdo_info_t const *pdos;        /**< Array with PDOs to assign. This must
                                         contain at least \a n_pdos PDOs. */
     ec_watchdog_mode_t watchdog_mode; /**< Watchdog mode. */
@@ -348,14 +346,38 @@ struct ecat_timer
     struct _ecat_timer stop_timer;
 };
 
+typedef void (*ec_pdo_callback_t)(uint16_t slave_index, uint8_t *output, uint8_t *input);
+
+/** EtherCAT slave sync signal configuration.
+ */
+typedef struct {
+    uint32_t cycle_time; /**< Cycle time [ns]. */
+    int32_t shift_time;  /**< Shift time [ns]. */
+} ec_sync_signal_t;
+
+#define EC_SYNC_SIGNAL_COUNT (2)
+
+typedef struct {
+    ec_sync_info_t *sync;                           /**< Sync manager configuration. */
+    uint8_t sync_count;                             /**< Number of sync managers. */
+    ec_pdo_callback_t pdo_callback;                 /**< PDO process data callback. */
+    uint16_t dc_assign_activate;                    /**< dc assign control */
+    ec_sync_signal_t dc_sync[EC_SYNC_SIGNAL_COUNT]; /**< DC sync signals. */
+} ec_slave_config_t;
+
 rt_err_t ecat_master_init(ec_master_t *master);
 
 rt_err_t ecat_master_deinit(ec_master_t *master);
 
+rt_err_t ecat_master_start(ec_master_t *master);
+
 rt_err_t ecat_simple_start(ec_master_t *master);
 
 rt_err_t ecat_simple_stop(ec_master_t *master);
 
+rt_err_t ecat_slave_config(
+    ec_master_t *master, uint16_t slave, ec_slave_config_t *config);
+
 rt_err_t ecat_master_state(ec_master_t *master, ec_master_state_t *state);
 
 rt_err_t ecat_slave_state(

+ 10 - 1
rt-thread/components/industrial_bus/ethercat/ecat_service.h

@@ -37,6 +37,8 @@
 #define ECAT_SERVICE_HWTIMER_START           (0x20)
 #define ECAT_SERVICE_SYNC_DC                 (0x0)
 
+#define ECAT_SERVICE_SLAVE_CONFIG            (0x21)
+
 struct ecat_master_state_arg
 {
     ec_master_t *master;
@@ -65,6 +67,13 @@ struct ecat_slave_info_arg
     uint16_t slave;
 };
 
+struct ecat_slave_config_arg
+{
+    ec_master_t *master;
+    ec_slave_config_t *config;
+    uint16_t slave;
+};
+
 struct ecat_pdo_arg
 {
     ec_master_t *master;
@@ -125,4 +134,4 @@ struct ecat_slavecount_arg
     int count;
 };
 
-#endif /* __ECAT_SERVICE_H__ */
+#endif /* __ECAT_SERVICE_H__ */

+ 184 - 184
rt-thread/components/security/mbedtls/ports/src/tls_certificate.c

@@ -41,46 +41,23 @@ const char mbedtls_root_certificate[] =
 "Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ\r\n" \
 "-----END CERTIFICATE-----\r\n" \
 "-----BEGIN CERTIFICATE-----\r\n" \
-"MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/\r\n" \
-"MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT\r\n" \
-"DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow\r\n" \
-"PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD\r\n" \
-"Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB\r\n" \
-"AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O\r\n" \
-"rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq\r\n" \
-"OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b\r\n" \
-"xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw\r\n" \
-"7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD\r\n" \
-"aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV\r\n" \
-"HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG\r\n" \
-"SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69\r\n" \
-"ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr\r\n" \
-"AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz\r\n" \
-"R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5\r\n" \
-"JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo\r\n" \
-"Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ\r\n" \
-"-----END CERTIFICATE-----\r\n" \
-"-----BEGIN CERTIFICATE-----\r\n" \
-"MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\r\n" \
-"MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\r\n" \
-"d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\r\n" \
-"QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\r\n" \
-"MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\r\n" \
-"b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\r\n" \
-"9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\r\n" \
-"CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\r\n" \
-"nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\r\n" \
-"43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\r\n" \
-"T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\r\n" \
-"gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\r\n" \
-"BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\r\n" \
-"TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\r\n" \
-"DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\r\n" \
-"hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\r\n" \
-"06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\r\n" \
-"PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\r\n" \
-"YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\r\n" \
-"CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\r\n" \
+"MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM\r\n" \
+"MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD\r\n" \
+"QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM\r\n" \
+"MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD\r\n" \
+"QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E\r\n" \
+"jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo\r\n" \
+"ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI\r\n" \
+"ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu\r\n" \
+"Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg\r\n" \
+"AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7\r\n" \
+"HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA\r\n" \
+"uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa\r\n" \
+"TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg\r\n" \
+"xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q\r\n" \
+"CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x\r\n" \
+"O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs\r\n" \
+"6GAqm4VKQPNriiTsBhYscw==\r\n" \
 "-----END CERTIFICATE-----\r\n" \
 "-----BEGIN CERTIFICATE-----\r\n" \
 "MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB\r\n" \
@@ -108,52 +85,93 @@ const char mbedtls_root_certificate[] =
 "jVaMaA==\r\n" \
 "-----END CERTIFICATE-----\r\n" \
 "-----BEGIN CERTIFICATE-----\r\n" \
-"MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF\r\n" \
-"ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6\r\n" \
-"b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL\r\n" \
-"MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv\r\n" \
-"b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj\r\n" \
-"ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM\r\n" \
-"9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw\r\n" \
-"IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6\r\n" \
-"VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L\r\n" \
-"93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm\r\n" \
-"jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC\r\n" \
-"AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA\r\n" \
-"A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI\r\n" \
-"U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs\r\n" \
-"N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv\r\n" \
-"o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU\r\n" \
-"5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy\r\n" \
-"rqXRfboQnoZsG4q5WTP468SQvvG5\r\n" \
+"MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT\r\n" \
+"MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i\r\n" \
+"YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG\r\n" \
+"EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg\r\n" \
+"R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9\r\n" \
+"9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq\r\n" \
+"fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv\r\n" \
+"iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU\r\n" \
+"1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+\r\n" \
+"bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW\r\n" \
+"MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA\r\n" \
+"ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l\r\n" \
+"uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn\r\n" \
+"Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS\r\n" \
+"tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF\r\n" \
+"PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un\r\n" \
+"hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV\r\n" \
+"5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==\r\n" \
 "-----END CERTIFICATE-----\r\n" \
 "-----BEGIN CERTIFICATE-----\r\n" \
-"MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB\r\n" \
-"vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL\r\n" \
-"ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp\r\n" \
-"U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W\r\n" \
-"ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe\r\n" \
-"Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX\r\n" \
-"MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0\r\n" \
-"IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y\r\n" \
-"IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh\r\n" \
-"bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF\r\n" \
-"AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF\r\n" \
-"9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH\r\n" \
-"H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H\r\n" \
-"LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN\r\n" \
-"/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT\r\n" \
-"rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud\r\n" \
-"EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw\r\n" \
-"WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs\r\n" \
-"exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud\r\n" \
-"DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4\r\n" \
-"sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+\r\n" \
-"seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz\r\n" \
-"4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+\r\n" \
-"BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR\r\n" \
-"lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3\r\n" \
-"7M2CYfE45k+XmCpajQ==\r\n" \
+"MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG\r\n" \
+"A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv\r\n" \
+"b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw\r\n" \
+"MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i\r\n" \
+"YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT\r\n" \
+"aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ\r\n" \
+"jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp\r\n" \
+"xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp\r\n" \
+"1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG\r\n" \
+"snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ\r\n" \
+"U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8\r\n" \
+"9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E\r\n" \
+"BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B\r\n" \
+"AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz\r\n" \
+"yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE\r\n" \
+"38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP\r\n" \
+"AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad\r\n" \
+"DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME\r\n" \
+"HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==\r\n" \
+"-----END CERTIFICATE-----\r\n" \
+"-----BEGIN CERTIFICATE-----\r\n" \
+"MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC\r\n" \
+"VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50\r\n" \
+"cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs\r\n" \
+"IEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz\r\n" \
+"dCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy\r\n" \
+"NTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu\r\n" \
+"dHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt\r\n" \
+"dGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0\r\n" \
+"aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj\r\n" \
+"YXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK\r\n" \
+"AoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T\r\n" \
+"RU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN\r\n" \
+"cCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW\r\n" \
+"wcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1\r\n" \
+"U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0\r\n" \
+"jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP\r\n" \
+"BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN\r\n" \
+"BgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/\r\n" \
+"jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ\r\n" \
+"Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v\r\n" \
+"1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R\r\n" \
+"nAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH\r\n" \
+"VHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g==\r\n" \
+"-----END CERTIFICATE-----\r\n" \
+"-----BEGIN CERTIFICATE-----\r\n" \
+"MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx\r\n" \
+"EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT\r\n" \
+"EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp\r\n" \
+"ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz\r\n" \
+"NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH\r\n" \
+"EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE\r\n" \
+"AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw\r\n" \
+"DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD\r\n" \
+"E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH\r\n" \
+"/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy\r\n" \
+"DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh\r\n" \
+"GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR\r\n" \
+"tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA\r\n" \
+"AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE\r\n" \
+"FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX\r\n" \
+"WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu\r\n" \
+"9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr\r\n" \
+"gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo\r\n" \
+"2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO\r\n" \
+"LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI\r\n" \
+"4uJEvlz36hz1\r\n" \
 "-----END CERTIFICATE-----\r\n" \
 "-----BEGIN CERTIFICATE-----\r\n" \
 "MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCB\r\n" \
@@ -190,31 +208,6 @@ const char mbedtls_root_certificate[] =
 "NVOFBkpdn627G190\r\n" \
 "-----END CERTIFICATE-----\r\n" \
 "-----BEGIN CERTIFICATE-----\r\n" \
-"MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC\r\n" \
-"VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50\r\n" \
-"cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs\r\n" \
-"IEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz\r\n" \
-"dCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy\r\n" \
-"NTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu\r\n" \
-"dHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt\r\n" \
-"dGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0\r\n" \
-"aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj\r\n" \
-"YXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK\r\n" \
-"AoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T\r\n" \
-"RU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN\r\n" \
-"cCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW\r\n" \
-"wcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1\r\n" \
-"U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0\r\n" \
-"jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP\r\n" \
-"BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN\r\n" \
-"BgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/\r\n" \
-"jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ\r\n" \
-"Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v\r\n" \
-"1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R\r\n" \
-"nAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH\r\n" \
-"VHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g==\r\n" \
-"-----END CERTIFICATE-----\r\n" \
-"-----BEGIN CERTIFICATE-----\r\n" \
 "MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB\r\n" \
 "yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL\r\n" \
 "ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp\r\n" \
@@ -243,87 +236,94 @@ const char mbedtls_root_certificate[] =
 "hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq\r\n" \
 "-----END CERTIFICATE-----\r\n" \
 "-----BEGIN CERTIFICATE-----\r\n" \
-"MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM\r\n" \
-"MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD\r\n" \
-"QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM\r\n" \
-"MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD\r\n" \
-"QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E\r\n" \
-"jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo\r\n" \
-"ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI\r\n" \
-"ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu\r\n" \
-"Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg\r\n" \
-"AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7\r\n" \
-"HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA\r\n" \
-"uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa\r\n" \
-"TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg\r\n" \
-"xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q\r\n" \
-"CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x\r\n" \
-"O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs\r\n" \
-"6GAqm4VKQPNriiTsBhYscw==\r\n" \
+"MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\r\n" \
+"MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\r\n" \
+"d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\r\n" \
+"QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\r\n" \
+"MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\r\n" \
+"b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\r\n" \
+"9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\r\n" \
+"CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\r\n" \
+"nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\r\n" \
+"43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\r\n" \
+"T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\r\n" \
+"gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\r\n" \
+"BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\r\n" \
+"TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\r\n" \
+"DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\r\n" \
+"hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\r\n" \
+"06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\r\n" \
+"PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\r\n" \
+"YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\r\n" \
+"CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\r\n" \
 "-----END CERTIFICATE-----\r\n" \
 "-----BEGIN CERTIFICATE-----\r\n" \
-"MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx\r\n" \
-"EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT\r\n" \
-"EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp\r\n" \
-"ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz\r\n" \
-"NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH\r\n" \
-"EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE\r\n" \
-"AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw\r\n" \
-"DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD\r\n" \
-"E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH\r\n" \
-"/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy\r\n" \
-"DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh\r\n" \
-"GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR\r\n" \
-"tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA\r\n" \
-"AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE\r\n" \
-"FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX\r\n" \
-"WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu\r\n" \
-"9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr\r\n" \
-"gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo\r\n" \
-"2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO\r\n" \
-"LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI\r\n" \
-"4uJEvlz36hz1\r\n" \
+"MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/\r\n" \
+"MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT\r\n" \
+"DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow\r\n" \
+"PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD\r\n" \
+"Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB\r\n" \
+"AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O\r\n" \
+"rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq\r\n" \
+"OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b\r\n" \
+"xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw\r\n" \
+"7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD\r\n" \
+"aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV\r\n" \
+"HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG\r\n" \
+"SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69\r\n" \
+"ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr\r\n" \
+"AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz\r\n" \
+"R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5\r\n" \
+"JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo\r\n" \
+"Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ\r\n" \
 "-----END CERTIFICATE-----\r\n" \
 "-----BEGIN CERTIFICATE-----\r\n" \
-"MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG\r\n" \
-"A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv\r\n" \
-"b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw\r\n" \
-"MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i\r\n" \
-"YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT\r\n" \
-"aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ\r\n" \
-"jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp\r\n" \
-"xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp\r\n" \
-"1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG\r\n" \
-"snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ\r\n" \
-"U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8\r\n" \
-"9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E\r\n" \
-"BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B\r\n" \
-"AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz\r\n" \
-"yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE\r\n" \
-"38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP\r\n" \
-"AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad\r\n" \
-"DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME\r\n" \
-"HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==\r\n" \
+"MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF\r\n" \
+"ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6\r\n" \
+"b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL\r\n" \
+"MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv\r\n" \
+"b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj\r\n" \
+"ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM\r\n" \
+"9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw\r\n" \
+"IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6\r\n" \
+"VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L\r\n" \
+"93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm\r\n" \
+"jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC\r\n" \
+"AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA\r\n" \
+"A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI\r\n" \
+"U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs\r\n" \
+"N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv\r\n" \
+"o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU\r\n" \
+"5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy\r\n" \
+"rqXRfboQnoZsG4q5WTP468SQvvG5\r\n" \
 "-----END CERTIFICATE-----\r\n" \
 "-----BEGIN CERTIFICATE-----\r\n" \
-"MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT\r\n" \
-"MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i\r\n" \
-"YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG\r\n" \
-"EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg\r\n" \
-"R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9\r\n" \
-"9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq\r\n" \
-"fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv\r\n" \
-"iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU\r\n" \
-"1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+\r\n" \
-"bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW\r\n" \
-"MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA\r\n" \
-"ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l\r\n" \
-"uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn\r\n" \
-"Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS\r\n" \
-"tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF\r\n" \
-"PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un\r\n" \
-"hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV\r\n" \
-"5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==\r\n" \
+"MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB\r\n" \
+"vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL\r\n" \
+"ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp\r\n" \
+"U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W\r\n" \
+"ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe\r\n" \
+"Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX\r\n" \
+"MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0\r\n" \
+"IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y\r\n" \
+"IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh\r\n" \
+"bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF\r\n" \
+"AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF\r\n" \
+"9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH\r\n" \
+"H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H\r\n" \
+"LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN\r\n" \
+"/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT\r\n" \
+"rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud\r\n" \
+"EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw\r\n" \
+"WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs\r\n" \
+"exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud\r\n" \
+"DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4\r\n" \
+"sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+\r\n" \
+"seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz\r\n" \
+"4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+\r\n" \
+"BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR\r\n" \
+"lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3\r\n" \
+"7M2CYfE45k+XmCpajQ==\r\n" \
 "-----END CERTIFICATE-----\r\n" \
 "-----BEGIN CERTIFICATE-----\r\n" \
 "MIIEDTCCA5OgAwIBAgIRAMXZCNUiwPiFYYakjvPx9I0wCgYIKoZIzj0EAwMwSzEL\r\n" \

+ 1 - 0
rt-thread/scripts/building.py

@@ -1145,6 +1145,7 @@ def EndBuilding(target, program = None):
     config_name = GetOption('gen-sdk')
     Env['config_name'] = config_name
     Env['project_name'] = project_name
+    Env['chip'] = rtconfig.CHIP
 
     if config_name:
         print(target)

+ 8 - 3
rt-thread/scripts/mkdist.py

@@ -106,10 +106,15 @@ def MkDist(program, BSP_ROOT, RTT_ROOT, Env, project_name, project_path):
 
     # copy .settings .cproject .project directory
     print('=> .settings')
-    if "amp" in os.path.basename(BSP_ROOT):
-        do_copy_folder(os.path.join(BSP_ROOT, '..', '..', '.ide', '.settings-amp'), os.path.join(dist_dir, '.settings'))
+
+    if Env['chip'] == 'rk3506':
+        if "amp" in os.path.basename(BSP_ROOT):
+            do_copy_folder(os.path.join(BSP_ROOT, '..', '..', '.ide', '.settings-amp'), os.path.join(dist_dir, '.settings'))
+        else:
+            do_copy_folder(os.path.join(BSP_ROOT, '..', '..', '.ide', '.settings-smp'), os.path.join(dist_dir, '.settings'))
     else:
-        do_copy_folder(os.path.join(BSP_ROOT, '..', '..', '.ide', '.settings-smp'), os.path.join(dist_dir, '.settings'))
+        do_copy_folder(os.path.join(BSP_ROOT, '..', '..', '.ide', '.settings-amp'), os.path.join(dist_dir, '.settings'))
+
     do_copy_file(os.path.join(BSP_ROOT, '..', '..', '.ide', '.cproject'), os.path.join(dist_dir, '.cproject'))
     do_copy_file(os.path.join(BSP_ROOT, '..', '..', '.ide', '.project'), os.path.join(dist_dir, '.project'))