Mark makes some excellent points.  I started developing C on the ARM side
under Linux before needing to start using PRUs.  I had not spent much time
in the TRM while working on the host side because I didn't need to.  It
really bit me until I did.  Once I really dug into the TRM and started to
understand the SOC at a hardware level, things began to progress much
better and faster.  And, going through the PRU Optimizing C/C++ Compiler
manual and PRU-ICSS/PRU_ICSSG Getting Started Guide on Linux helped too.
 What DID NOT HELP was that TI has not finished moving the wiki pages over
to a new resource but at least they made them available for download.

And, finally, this group of people have been awesome to help!


<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=icon>
Virus-free.
www.avast.com
<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=link>
<#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>

On Sat, May 8, 2021 at 7:52 PM 'Mark Lazarewicz' via BeagleBoard <
beagleboard@googlegroups.com> wrote:

> Hello Cheng
>
> I learned a few things this weekend I thought I would share
>
> The PRU  Labs examples 1 to 3 can be loaded with CCS and JTAG from Windows
> 10
>
> You can even debug both PRU0 and PRU1 at the same time examine memory and
> use HW  uart debug to speed up development
>
> The RPMSG example LAB  must be loaded by the linux or TI RTOS drivers
> running on ARM side
>
> I have win 7 and Windows 10 CCS/JTAG installations working one  a
> Beaglebone White and the other AM335X SK
> BBB is also supported
>
> My Last step is building the SDK  linux kernel from scratch  with rproc
> kernel modules loaded  from a VirtualBox Ubuntu VM on Win 7
>
> The Linux  SDK has binaries for the ARM side *so a  Native Linux BOX is
> NOT REQUIRED(but recommended )*
>
> *CCS DOES NOT require linux to load and debug PRU *
>
> For those that want to learn ARM TI RTOS Win 10 is required to build
>
> The SDK documents I saved as the wiki is disappearing are awesome I found
> some very detailed PRU documentation that talks about everything from
> running TI PRU firmware On PRU ICCS for complex Industrial protocols as
> well a custom PRU code
>
> The facts about clock cycles also were discussed. All of it in can be
> found by following the documentation tar ball I sent I you.
>
> I think too many people panic dont want to run SDK Linux or use CCS /JTAG
> dont read through all the documents as they dont want to go that route.
>
> Thats fine but the basic fundamentals of the whole SOC are then missed
> leading to confusion
>
> The SDK has done an excellent job of documenting this unfortunately unless
> your actually using the SDK all of this is hidden and I guess they are
> taking down some wikis so kind of sad this data will be lost.
>
> The approach in this group is wonderful especially for Linux App types
> that don't care about details
>  they just want a working kernel and actually making one script to build
> linux makes sense as supporting keystroke errors and inability to read docs
> in a chronological orderly way would be a nightmare.
>
> So in summary In my humble Opinion if your goal is writing Linux apps on a
> open source board the SDK probally is NOT for you.
>
> If your goal is barebones, TI  RTOS , board bring up, custom hardware ,
> DSP programming Cortex M4 programming , advanced PRU apps or learning or
> adding Linux Device drivers the SDK is a great asset.
>
> Mark
>
>
>
> On Thursday, May 6, 2021, 05:28:39 PM CDT, Cheng Chen <chenc2...@gmail.com>
> wrote:
>
>
> Hi Walter,
>
> Sorry for the late reply.
> The most important part I modified for TI's makefile is to make sure that
> the firmware is loaded into remoteproc1. I basically replaced the loading
> procedure in the shell script with Molly's version which I attached below.
> I also added the entire include file and modified some of the constants and
> variable names in the c code because compiler reports errors of
> unrecognized header file and variables. But except those, it runs pretty
> well.
>
> start:
> ifneq ($(PRU_DIR),)
> @echo write_init_pins.sh
> @$(COMMON)/write_init_pins.sh /lib/firmware/$(CHIP)-pru$(PRUN)-fw
> @echo "-    Starting PRU $(PRUN)"
> @echo start > $(PRU_DIR)/state
> else ifeq ($(PROC),tidl)
> ti-mct-heap-check -c
> sudo mjpg_streamer -i "input_opencv.so -r 640x480 -d /dev/$(shell fgrep -v
> vpe /sys/class/video4linux/video*/name | perl -ne '/\/(video\d+)\/name/ &&
> print $$1') \
> --filter ./$(TARGET)$(EXE)" -o "output_http.so -p 8090 -w
> /usr/share/mjpg-streamer/www"
> else
> ./$(TARGET)$(EXE)
> endif
>
>
> Regards,
> Cheng
>
>
> Walter Cromer <walt...@edenconceptsllc.com> 于2021年5月4日周二 下午4:02写道:
>
> I am glad to have helped a little bit.   Stick with it.  When it clicks
> and you start really moving forward I think you'll be pleased.
>
> Can you share the changes to the Makefile that you made?  I'm curious if
> it might help me.
>
> Right now I am reading the ADC every 2.7ms.  I'm reading three channels.
> I include the step id too and check that.  I am using switch-case to check
> the step and put the analog input into the right variable in my code.   It
> might be slighter faster with an if-elseif but I like the neatness of the
> switch-case and until it causes me timing problems, I'm sticking with it.
>
> I am also fairly certain the ADC can be read faster.  I have the ADC in
> one-shot mode and delay before I kick it off again.   I've also run this
> with no averaging, 4 averages, and 16 averages and it makes very little
> difference in timing for me.
>
> Walter
>
> On Tuesday, May 4, 2021 at 11:33:51 AM UTC-4 chen...@gmail.com wrote:
>
> Hi Walter,
>
> Thank you so much for the reply. I think my setup is exactly the same as
> what you have (win10 and BBB wireless). That really motivated me to see
> somebody else successfully run the system with the same setup.
> I actually made some preliminary progress after two nights brooding and I
> am able to read out ADC data through rpmsg. Thanks a lot for your tips.
>
> I think the problem is still in the makefile and environment. As you
> mentioned, you are using makefile from PRUcookbook while I started off with
> TI's built-in makefile.  I believe there is a couple of slight difference
> between Debian system and TI SDK environment which turns out to be critical
> in compiling. I carefully compared the difference between two makefiles and
> created one which is close to the makefile in the PRUcookbook. That works
> like a charm.
>
> Next step I also want to explore precise timing and see how fast the adc
> can run. May I ask what is the speed you are reading out from ADC?
>
> Regards,
> Cheng
>
> 在2021年5月3日星期一 UTC-4 上午11:24:23<wal...@edenconceptsllc.com> 写道:
>
> I just went through this pain and the people in this group were awesome
> help.
>
> I needed to read three analog inputs and it was a bear but once I got it,
> it has been going well.
>
> You don't mention the OS of your development platform or I may have missed
> it.  I'm on a Windows 10 box and using a BBB Wireless.  TI's entire
> learning system for this expects a Linux development platform so it's not
> as useful as it could be if you are on Windows.  I didn't want to go to the
> trouble of even bringing up a virtual Linux on my Windows box for this.  I
> did install Code Composer Studio (CCS) from TI, but gave up on it.  There's
> no easy way to transfer your compiled firmware to the BBB from within it
> according to TI.   So I just do everything on the Beagle and it meets my
> needs.
>
> I use the cloud9 IDE that ships with the BeagleBones for coding both the
> ARM and PRU code.  This environment compiles the ARM-side code and executes
> it just like any normal host (aka Linux, aka ARM) program just fine.
>  However, to compile the PRU code and load it I go over to a PUTTY session
> and use the make files from Mark Yoders' PRU Cookbook (
> https://markayoder.github.io/PRUCookbook/) .  My process is clunky but my
> programs aren't huge or extremely complex (yet) and this works for me.  I
> don't have and don't want to invest in a debug probe so debugging the PRU
> code can be a pain and slow.  The only option really is to use RPMsg almost
> like printf to send messages back at key points in the PRU code to let me
> know where it is executing and what's happening.  (Purists and more
> advanced developers are barfing and laughing at me right now I am sure.)
>
> I strongly encourage you to get the Technical Reference Manual for the TI
> ARM335x and specifically spend time with the Touchscreen Controller
> chapter.  If you need precise timing, you'll want to spend time in the
> Industrial Ethernet Peripheral chapter too.   These are powerful tools once
> you understand them.
>
> Also, get the PRU Optimizing C/C++ Compiler manual from TI and go through
> it.  One thing that really tripped me up was their implementation of the
> __far keyword.   GCC doesn't recognize that and I didn't understand what
> was going on at first.
>
> As Mark commented, some people encourage using remoteproc, some encourage
> using libpruio and some still use the uio. TI supports remoteproc and I
> expect them to be around so I went with remoteproc.  It may have its
> drawbacks but it is working just fine for me.  I can't comment on the other
> two as I have not tried them.   Also, I've found the TI E2E forum's
> moderators to be patient with me as a neophyte.   But the Google group's
> members do have wider experience.
>
> FYI - watch out for how TI puts some register settings that cross nibble
> or byte boundaries.  It can really bite you!  Take a look at the
> STEPCONFIGn registers implementation of averaging to see what I mean.
>
> I hope this helps!
>
> On Saturday, May 1, 2021 at 12:46:03 PM UTC-4 lazarman wrote:
>
> <<<My first intention is to post in TI E2E support forums
> <https://e2e.ti.com/>, but it requires a company email to do so.
>
> Hello Cheng
>
> I want to Help you  but it appears my message is lost in translation
>
> What it sounds like to me  is TI pays these engineers $$ to answer
> questions and does not want to waste time and $$$ with users that dont
> follow their well written instructions *which say use SDK Yocto Linux on
> the ARM for this example.*
>
> For me I start with a working example with instructions and documentation
> then modifyit
>
> If I undertsand correctly you have *never* had an example working
>
> If you like breaking examples and working on projects that ONLY works from
> a unix script and hides all the details then this is the correct group to
> to ask questions (-:
>
> I suggest you try the example *you found*  following the intructions
> exactly.  if you cant or wont do that switch to DEbian/Cookbook
>
> But if you do the latter I suggest don't change things follow the
> instructions
>
> What is interesting is a Linux C application program should work correctly
> if it was coded generic especially when both Linux variants are for the
> same chip. Trying to figure out what is different between Linux variants to
> me is not productive its not my focus for you maybe it is.
>
> Perhaps the Linux in the SDK was configured differently which implies it
> handle PRU slightly different Im not surprised by this.
>
> Perhaps you can find what's different that may be a valid approach that
> works for you and maybe someone can help. I think Dennis gave you a good
> clue.
>
> I will watch the thread hopefully I can be of help should you choose to
> follow the path E2E and the SDK layed out for you
>
> Cheers
>
> On Friday, April 30, 2021, 07:52:09 PM CDT, Cheng Chen <chen...@gmail.com>
> wrote:
>
>
> Hey Mark,
>
> Thanks for spending time for replying. I really appreciate it.
> I totally agree with you that one should spend time investigating first. I
> apologize if they are dumb questions, but I have stuck there for two weeks.
> I am more a circuit guy and just started picking up Beaglebone as a hobby
> and potential career expansion.
>
> My first intention is to post in TI E2E support forums
> <https://e2e.ti.com/>, but it requires a company email to do so. If this
> particular .org is not a good place for rookie questions, would you please
> advise some place for suitable for discussion?
>
> Regarding to the documents, are you referring to processor SDK Linux
> Software Developer's guide? If that is the one, I did follow its
> instructions, but maybe I missed something. I will go over it again. If
> that's not the one, which document are you referring to? I also went
> through PRUcookbook and Exploring BeagleBone by Derek Molly. Not a lot are
> mentioned regarding this topic.
>
> The code is built-in in the Beaglebone Black, this is one of the reasons I
> am confused why it cannot be compiled. One can also download freely from TI
> github (
> https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/
> ).
>
> Again thanks for the advice and suggestion. I am very glad that there is
> such a nice place that I can call for help and I hope after some practice I
> am also able to contribute here.
>
> Regards,
> Cheng
>
> 在2021年4月30日星期五 UTC-4 下午5:09:01<lazarman> 写道:
>
> Hello
>
> I know the code. It's all explained in the SDK documention. I also like
> these examples.
> Your asking questions about an SDK that's supported by Texas Instruments.
> You do understand this .org group you posted in may contain TI employees
> but is NOT TI support it's Beagle board Debian.
>
>  I think if you read the documents you will understand the answers
>
>  I'm sure you could compile this with some work the sdk instructions talk
> about This.
>
> Hypothetical question ❓
> If the instructions told you a virtual box build was not supported and not
> recommended would you use one anyway and then ask the person who told you
> not too do this why it doesn't work.
>
> I'm struggling to be nice in this reply.
>
>  I remember asking questions as a young engineer that clearly showed I
> made zero effort to research anything.
>
> Then one day I got some really critical replies about my skills.
>
> Do some reading then if stuck ask questions
>
> Or better yet follow what the sdk instructions suggest.
>
> If you found this code  on internet and don't have a TI account or are not
> eligible for ITAR restrictions to download the sdk  you have a big problem.
>
> I see you have a Gmail account
>
>
>
>
>
>
> Sent from Yahoo Mail on Android
> <https://go.onelink.me/107872968?pid=InProduct&c=Global_Internal_YGrowth_AndroidEmailSig__AndroidUsers&af_wl=ym&af_sub1=Internal&af_sub2=Global_YGrowth&af_sub3=EmailSignature>
>
> On Fri, Apr 30, 2021 at 3:09 PM, Cheng Chen
> <chen...@gmail.com> wrote:
>
> Hi all,
>
> I am practicing PRU skills through some TI examples. I am playing with 
> PRU_ADC_onChip
>
> <https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/tree/examples/am335x/PRU_ADC_onChip?h=master>example
> and ran into a few questions. I wonder if you can help me with.
>
> The nice thing about this example is it has a README.txt with all the
> procedures. The idea is to use rpmsg to communicate between arm and pru
> module and read out ADC value.
> I am using a Beaglebone Black wireless.
> Here is the basic procedures.
>
> FILE STRUCTURE
> PRU_ADC
>   |
>   |--pru_adc_firmware.c firmware loaded into PRU0
>   |
>   |--pru_adc_userspace
>        |--pru_adc_userspace.c userspace code that interacts with PRU0
>
> BUILD FIRMWARE & USERSPACE CODE
> $ cd <PATH_TO_PRU_SW_SUPPORT_PACKAGE>/examples/am335x/PRU_ADC_onChip/
> $ make clean
> $ make
> $ cd pru_adc_userspace/
> $ make clean
> $ make
>
> My BBB wireless can compile pru code successfully because I installed
> PRU_CGT compiler. But it is unable to compile ARM code. I think that is
> because ARM_CCT cross-compiler toochain environment is missing, in another
> word, I need to install processor-sdk-am335x
>
> My first questions is can I install processor-sdk-am335x  into Debian
> system I currently have (Linux beaglebone 4.19.94-ti-r62 ) ? I am a little
> confused about the relationship between this SDK and Debian system. Why is
> the tutorial asking me to compile  pru_adc_userspace.c  in the Beaglebone.
> I thought it is supposed to be executed in a cross-compilation environment.
>
> I ended up installing processor-sdk-am335x on my linux desktop and
> compiled successfully. Then I copied the generated file back to BBB
> wireless. But when I tried to run the program, it shows the following
> error.
>
> Reading voltage at ADC Channel: 5
> /dev/rpmsg_pru30 could not be opened.
> Trying to initialize PRU using sysfs interface.
> ERROR: Could not open /dev/rpmsg_pru30
>
> Attached is the excerpt where the problem happened. Could anyone help me
> with some hints of what is going on here? Much appreciated.
>
>
> struct shared_struct message;
>
> /* use character device /dev/rpmsg_pru30 */
> char outputFilename[] = "/dev/rpmsg_pru30";
>
> /* test that /dev/rpmsg_pru30 exists */
> FILE *ofp;
> uint16_t returnedVoltage;
> ofp = fopen(outputFilename, "r");
>
> if (ofp == NULL) {
>
> printf("/dev/rpmsg_pru30 could not be opened. \n");
> printf("Trying to initialize PRU using sysfs interface.\n");
>
> FILE *sysfs_node;
> char firmware[] = "/sys/class/remoteproc/remoteproc1/firmware";
> char firmwareName[] = "PRU_ADC_onChip.out";
> sysfs_node = fopen(firmware, "r+");
> if (sysfs_node == NULL) {
> printf("cannot open firmware sysfs_node");
> return EXIT_FAILURE;
> }
> fwrite(&firmwareName, sizeof(uint8_t), sizeof(firmwareName),
> sysfs_node);
> fclose(sysfs_node);
>
> char pruState[] = "/sys/class/remoteproc/remoteproc1/state";
> char start[] = "start";
> sysfs_node = fopen(pruState, "r+");
> if (sysfs_node == NULL) {
> printf("cannot open state sysfs_node");
> return EXIT_FAILURE;
> }
> fwrite(&start, sizeof(uint8_t), sizeof(start), sysfs_node);
> fclose(sysfs_node);
>
> /* give RPMSG time to initialize */
> sleep(3);
>
> ofp = fopen(outputFilename, "r");
>
> if (ofp == NULL) {
> printf("ERROR: Could not open /dev/rpmsg_pru30\n");
> exit(EXIT_FAILURE);
> }
> }
>
>
>
>
>
> --
> For more options, visit http://beagleboard.org/discuss
> ---
> You received this message because you are subscribed to the Google Groups
> "BeagleBoard" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to beagleboard...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/beagleboard/1d43aa7b-0e94-4431-9e31-13545213940bn%40googlegroups.com
> <https://groups.google.com/d/msgid/beagleboard/1d43aa7b-0e94-4431-9e31-13545213940bn%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
> --
> For more options, visit http://beagleboard.org/discuss
> ---
> You received this message because you are subscribed to the Google Groups
> "BeagleBoard" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to beagleboard...@googlegroups.com.
> To view this discussion on the web visit
>
> https://groups.google.com/d/msgid/beagleboard/39813de1-fa27-41d7-9422-7ef375ae36b4n%40googlegroups.com
> <https://groups.google.com/d/msgid/beagleboard/39813de1-fa27-41d7-9422-7ef375ae36b4n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
> --
> For more options, visit http://beagleboard.org/discuss
> ---
> You received this message because you are subscribed to a topic in the
> Google Groups "BeagleBoard" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/beagleboard/W5jMCO3fu84/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> beagleboard+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/beagleboard/ca296f29-c476-45fc-906d-e24595453270n%40googlegroups.com
> <https://groups.google.com/d/msgid/beagleboard/ca296f29-c476-45fc-906d-e24595453270n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
> --
> For more options, visit http://beagleboard.org/discuss
> ---
> You received this message because you are subscribed to the Google Groups
> "BeagleBoard" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to beagleboard+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
>
> https://groups.google.com/d/msgid/beagleboard/CAAOtuRfyiDxEL_N23_%2B1KFzH7EAt%2BapifqpkUCdGHn077Sc7Ww%40mail.gmail.com
> <https://groups.google.com/d/msgid/beagleboard/CAAOtuRfyiDxEL_N23_%2B1KFzH7EAt%2BapifqpkUCdGHn077Sc7Ww%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>
> --
> For more options, visit http://beagleboard.org/discuss
> ---
> You received this message because you are subscribed to the Google Groups
> "BeagleBoard" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to beagleboard+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/beagleboard/1205556611.1038015.1620517942188%40mail.yahoo.com
> <https://groups.google.com/d/msgid/beagleboard/1205556611.1038015.1620517942188%40mail.yahoo.com?utm_medium=email&utm_source=footer>
> .
>


-- 
Thanks,

Walter Cromer
Chief Idea Officer & Founder
Eden Concepts LLC
m: 865-719-8881
http://edenconceptsllc.com

Live. Grow. Harmonize.

The information contained in this e-mail message may be privileged and
confidential. If the reader of this transmission is not the intended
recipient, you are hereby notified that any dissemination, distribution or
copying of this communication is strictly prohibited. If you have received
this communication in error or are not sure whether it is privileged,
please immediately notify us by return e-mail and delete or destroy any
copies, electronic, paper or otherwise, which you may have of this
communication and any attachments.


<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=icon>
Virus-free.
www.avast.com
<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=link>
<#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/CAGNysGa0gRKN0UghTCeKR0wuk9UKzLFz9YbgTNZ8LiJEK3hfUA%40mail.gmail.com.

Reply via email to