Arduino-通过串行发送大量数据

时间:2019-11-22 19:44:02

标签: arduino serial-port

我正在尝试使用arduino mega构建一个简单的FLASH存储器编程器(用于39SF020A)。我编写了C代码和Python脚本来发送数据(所有这些都按预期工作)。 我需要传输约32k的十六进制数据,但是通过我的设置,仅10k的数据就花费了大约4分钟(115200 BAUD),这让我发现不必要的长时间。目前,我正在通过串行(从Python)发送带有终止符的值(我选择了“ $”),因此示例为“ 3F $”。地址是在arduino上计算的,因此无需发送它们。

在我的arduino代码中,我有

String received_string = Serial.readStringUntil('$');

,然后使用arduino将每个字节编程为FLASH之后,它会发回“ \ n”以告知Python,它已准备好接收下一个字节(Python正在等待接收“行”,然后继续)。我不确定这是否是一种方法,如果一次只发送一个字节是个好主意,如果不是,我应该如何在arduino上解析它们?反馈回路有用吗?

谢谢。

Python代码: (“文件”包含所有数据)

for item in file[1:]:
ser.write((item + "$").encode("ascii"))
line = ser.readline()
i += 1

if i >= top:
    break
elif (i % 100) == 0:
    print(i)

Arduino代码(只是其中的一部分)

if (Serial.available() > 0){
    String received_string = Serial.readStringUntil('$');
    programData(received_string.toInt(),program_adress);
    program_adress++;
}
void programData(char data_in, unsigned long adress)
{
  digitalWrite(OE,HIGH);
  digitalWrite(CE,LOW);
  writeByte(0xAA, 0x5555);
  writeByte(0x55, 0x2AAA);
  writeByte(0xA0, 0x5555);
  writeByte(data_in, adress);
  Serial.print("\n");    // Feedback for Python
  delayMicroseconds(30); // Just to be on the safe side
}


void writeByte(char data_in, unsigned long adress)
{
  setDataAs(OUTPUT);
  digitalWrite(OE,HIGH);
  digitalWrite(WE,HIGH);
  setAdress(adress);
  setData(data_in);
  digitalWrite(WE,LOW);
  delayMicroseconds(1);
  digitalWrite(WE,HIGH);
}


// Sets data BUS to input or output
void setDataAs(char dir){
  for (unsigned int i = 0; i < data_size    ;i++) pinMode(data[i],dir); 
}

// Sets data to specific values
void setData(char data_i){
  setDataAs(OUTPUT);
  for (int i = 0; i < data_size;i++) { digitalWrite(data[i],bitRead(data_i,i)); }
}



void setAdress(long adr){
// Set all adresses
for (int i = 0; i < adresses_size;i++)    
   digitalWrite(adresses[i],bitRead(adr,i));
}

0 个答案:

没有答案