本帖最后由 Simon21ic 于 2013-3-13 00:46 编辑
貌似压力不大:
uint16_t stlink_process(uint8_t *cmd, uint16_t len)
{
switch (cmd[0])
{
case STLINK_CMD_GET_VERSION:
{
uint16_t version =
((uint16_t)(stlink.version.stlink & 0x0F) << 12) |
((uint16_t)(stlink.version.adi & 0x3F) << 6) |
((uint16_t)(stlink.version.swim & 0x3F) << 0);
SET_BE_U16(&cmd[0], version);
SET_LE_U16(&cmd[2], stlink.version.vid);
SET_LE_U16(&cmd[4], stlink.version.pid);
return 6;
}
case STLINK_CMD_GET_MODE:
{
cmd[0] = 0;
cmd[1] = (uint8_t)stlink.mode;
return 2;
}
case STLINK_CMD_GET_VOLTAGE:
{
uint16_t voltage;
interfaces->target_voltage.get(0, &voltage);
SET_LE_U32(&cmd[0], (voltage / 2) * 4096 / 3300);
SET_LE_U32(&cmd[4], 1200 * 4096 / 3300);
return 8;
}
case STLINK_CMD_ADI:
switch (cmd[1])
{
case STLINK_ADI_SUBCMD_READ_MEM32:
{
uint32_t addr = GET_LE_U32(&cmd[2]);
uint16_t len = GET_LE_U16(&cmd[6]);
if (adi_memap_read_buf32(addr, &cmd[0], len))
{
stlink.port.adi.rw_status = STLINK_ADI_REP_FAIL;
}
else
{
stlink.port.adi.rw_status = STLINK_ADI_REP_OK;
}
return len;
}
case STLINK_ADI_SUBCMD_WRITE_MEM32:
{
uint32_t addr = GET_LE_U32(&cmd[2]);
uint16_t len = GET_LE_U16(&cmd[6]);
if (adi_memap_write_buf32(addr, &cmd[16], len))
{
stlink.port.adi.rw_status = STLINK_ADI_REP_FAIL;
}
else
{
stlink.port.adi.rw_status = STLINK_ADI_REP_OK;
}
return 0;
}
不过,USB转SPI,IIC,PWM功能需要换个PC驱动才能使用,stlink的PC驱动不知道怎么通信,要换成libusb的驱动。
额外的CDC还没有增加。
换驱动界面:
|