- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi, I need to communicate between de10 and esp8266 to send data to the cloud, but first I need to connect these 2 kits base on project GHRD. I see they can connect with each other by IP uart rs232 and I can do the steps:
build qsys => modify file top.v =>run quartus=>generate file hex.
And now i need code use hps control it send data, example send "abcde" to tx port with baund rate 9600 or 115200. But i don't know how to do it ?. So I really need your help. I attached 3 pictures I made.Thank you very much.
QSYS
add external port for uart rs232
file hex contain rs232_0_base
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Allen
Do you have a scope available to measure the signals coming out from the pins?
Do you have the specification for the USB transceiver that you are using? What operating signal logic it is able to capture?
The signals coming out from the GPIO are 3.3Vs.
Regards
Jingyang, Teh
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Sorry i had a important update with all image. You will follow new image i update and I don't know why my code is like this but esp8266 doesn't receive data? You help me check it. Thank you very much for your help.
QSYS
add external port for uart rs232 serial port
code rx for esp8266 (1)
code rx for esp8266 (2)
file hex contain UART_0_BASE
code tx for de10 (1)
code tx for de10(2)
code tx for de10 (3)
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Alen1214
What error are you experiencing when running the code on the HPS?
Can you please share the run logs for the code in the HPS.
Could you share a screenshot of your Address Map in Qsys?
I think it could be related to the address value that you set for the uart.
Could you print out what is the exact value of h2p_lw_uart_addr?
Regards
Jingyang, Teh
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thank a lot Jingyang, Teh.
when running the core on the HPS, I has no error and in terminal has a long string "hello hello ...." but ESP8266 is not getting any character.
Then I share with you some screenshot of your Address Map in QsysAddress map in Qsys (1)
Address map in Qsys (2)
Address map in Qsys (3)
I will print out the exact address value of h2p_lw_uart_addr as soon as I can. And I hope you check for me with some information I provided.
I thank you very much for your help and I hope you have amazing date!!!
Regards,
Alen1214
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Alen1214
From the address map I see that UART IP is connected to the light-weight F2H and an offset of 0x7000.
The LWF2H start address is 0xFF200000.
Could you try accessing the address 0xFF207000 as your h2p_lw_uart_addr?
Regards
Jingyang, Teh
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Jingyang, Teh,
I have transferred data from de10 out of uart pin successfully. But the data retransmitted was wrong when I could transmit the data string data "PLEASE" received as "Ó", received "1234" as "Ê". The device I use to receive is a UArt to usb module (CP2102).
I do the following step by step:
1. Connect hardware:
Connect hardware (1)
Connect hardware (2)
data received from CP2102 displayed on hercules terminal
2. Add ip into GHRD project
Qsys connection
configure IP uart
address map (1)
address map (2)
address map (3)
3.Assignments pin
File top.v(1)
File top.v(2)
Assignments pin (GPIO 6 - RX, GPIO7-TX)
4. File hex use for code C
Define for IP UART
5. FILE CODE C: admin, please help me check carefully the C code that has set baudrate and especially send the data, is it correct?
-------------------------------------------
Thank you very much Jingyang. I hope you have amazing day.
Regards,
Alen1214.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello!
Hope you are doing well, need your help with the following issue!
Description:
What i am trying to test out receiving and transmitting with the code i have made the qsys design programmed it wrote the c code, etc. everything works fine as soon as i change the main() to take the data i.e., RX and copy it to char array of TX to write it back on the screen in this case putty it doesn't work idk why. Can you please help me this! Thank you very much!
Code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/mman.h>
#include <sys/time.h>
#include "ARM_A9_HPS.h"
#include <string.h>
//lw bus; uart
#define HW_REGS_BASE 0xff200000
#define HW_REGS_SPAN 0x00001000
#define HW_REGS_MASK ( HW_REGS_SPAN - 1 )
void uart_putc(char c ,unsigned long *h2p_lw_uart_addr)
{
unsigned short uart_status;
do
{
uart_status = *(h2p_lw_uart_addr + 2);
}while(!(uart_status & 0x40));
*(h2p_lw_uart_addr + 1) = c;
}
void uart_printf(char *str ,unsigned long *h2p_lw_uart_addr)
{
while(*str != '\0')
{
uart_putc(*str ,h2p_lw_uart_addr);
str++;
}
}
int uart_getc(unsigned long *h2p_lw_uart_addr)
{
unsigned short uart_status;
do {
uart_status = *(h2p_lw_uart_addr + 2);
} while (!(uart_status & 0x80));
return *(h2p_lw_uart_addr + 0);
}
int uart_scanf(char *p,unsigned long *h2p_lw_uart_addr)
{
int cnt = 0;
while (1) {
*p = uart_getc(h2p_lw_uart_addr);
cnt++;
if (*p == '\n' || *p == '\r')
return cnt;
else
p++;
}
}
// /dev/mem file id
int fd;
int main()
{
void *virtual_base;
int i;
unsigned long *h2p_lw_uart_addr;
// === get FPGA addresses ==================
// Open /dev/mem
if( ( fd = open( "/dev/mem", ( O_RDWR | O_SYNC ) ) ) == -1 )
{
printf( "ERROR: could not open \"/dev/mem\"...\n" );
return( 1 );
}
//============================================
// get virtual addr that maps to physical
// for light weight AXI bus
virtual_base = mmap( NULL, HW_REGS_SPAN, ( PROT_READ | PROT_WRITE ), MAP_SHARED, fd, HW_REGS_BASE );
if( virtual_base == MAP_FAILED )
{
printf( "ERROR: mmap() failed...\n" );
close( fd );
return( 1 );
}
h2p_lw_uart_addr=(unsigned long*) (virtual_base);//uart
*(h2p_lw_uart_addr + 4) = (int) ((UART_0_FREQ / UART_0_BAUD)-1) ;
char c[20]="Transmitting";
char p[20] = "";
while( 1 )
{
uart_scanf(&p[0],h2p_lw_uart_addr);
usleep(100*1000);
p = c;
uart_printf(&c[0],h2p_lw_uart_addr);
usleep( 100*1000 );
}
}
As just TX works fine (from board) i think qsys implementation is correct and simple too.
Thanks,
Tarun_rai
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
Small clarification i uesd "strcpy(p, c)" to copy the string.
Thanks!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
I added more about the implementation step:
Connect hardware
I have looked for examples of uart of this IP but there are very few examples and only got 1 example made with the GHRD project from this links:
1. https://blog.csdn.net/weixin_43649647/article/details/121069892
2. Page 140 to page 155: https://www.intel.com/programmable/technical-pdfs/683130.pdf
3. Project example for Nios (but I must use with GHRD): https://www.intel.com/content/www/us/en/design-example/715139/cyclone-v-uart-rs-232-maximum-baud-rate-reference-design.html?wapkw=uart
Also, I think this problem may be caused by asynchronous transfer speed (baundrate) of the two devices or another error? But I don't know how to fit it. please help me to fix this error of wrong data transmission.
Thanks,
Alen1214
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Jingyang, Teh,
You can get project GHRD at link I was upload:
https://drive.google.com/file/d/1Bse1dQUNYEjjC0GkylL1VpXxlSVzFtoI/view?usp=sharing
Thanks,
Alen1214
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Allen
For the baud rate settings, you do not need to write to the divisor register as you have selected "Fixed Baudrate" in the IP Configuration.
Writing to the divisor register as no effect.
Gone through the code that you shared, it looks fine with all the condition checking before sending.
One thing I can think of is the stop bit settings. The tool that you are using to write and read from the UART does not have a settings to set the Stop bits.
Could you try with another tool such as Putty? In putty there is a Stop bits settings, with that set the Stop bit to 1 same as the IP configuration.
Regards
Jingyang,Teh
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Alen
Have you tried using a different tool that supports setting stop bit?
There are a few that I have used before: Teraterm & putty.
Regards
Jingyang, Teh
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
hi,I have tried using putty but it's not correct.
putty
putty
terminal
Tomorrow, I will try with configure some parameters : not "fixed baud rate" or "baud =9600". sometime, I think With clock 50M and baud 115200 maybe make larger speed error.
regards,
Alen
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Allen
Do you have a scope available to measure the signals coming out from the pins?
Do you have the specification for the USB transceiver that you are using? What operating signal logic it is able to capture?
The signals coming out from the GPIO are 3.3Vs.
Regards
Jingyang, Teh
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
hi JingyangTeh,
Thank you so much for your support. I succeeded in this application. The problem : the baudrate of IP in the manual is not true to reality.
regards,
alen
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Alen
That is weird that the baudrate are different from set.
How much difference was it?
How did you correct the difference?
Regards
JIngyang, Teh
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi JingyangTeh,
When I found the error, I felt strange.
When I set baudrate = 9600, the real baudrate is 12500 (time per bit is 80us). And I used oscilloscope to measure and detect that.
Regards,
Alen (Phan Quang Kỳ)
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Alen
Glad that you are able to get your project working.
Could you please share the wave form that you have and a screenshot of the settings that you done in the IP?
What version of the quartus that you are using currently?
I will raise this up to the engineering team to investigate this issue further as this is not an expected behaviour.
Regards
Jingyang, Teh
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Allen
Any update on this case?
It would be great if you could share me a screenshot of the waveform captured.
Thanks in advance!
Regards
Jingyang, Teh
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi JingyangTeh,
Please wait a few weeks, I have some reports to report once completed, I will send them to you.
Regards,
Alen
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Alen
Thanks for the sharing.
Hope to hear from you regarding the waveform.
Regards
Jingyang, Teh

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page